Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Сгруппировать массив
 
 автор: garold   (13.07.2010 в 05:41)   письмо автору
 
 

Есть многомерный массив. Например в массиве есть элементы с именем news_cat.
Мне нужно сгрупиировать массив по данному элементу. Типо как реализовано в SQL - GROUP BY.


В php нашел функции array_filter,array_unique но они не применительны к многомерным массивам.

  Ответить  
 
 автор: sim5   (13.07.2010 в 07:33)   письмо автору
 
   для: garold   (13.07.2010 в 05:41)
 

Имя, это значит ключ, а в пределах одномерного массива одинаковых ключей быть не может. О чем речь идет?

  Ответить  
 
 автор: garold   (13.07.2010 в 11:33)   письмо автору
 
   для: sim5   (13.07.2010 в 07:33)
 

речь идет о многомерном массиве. Будьте, пожалуйста повнимательнее!

  Ответить  
 
 автор: sim5   (13.07.2010 в 11:39)   письмо автору
 
   для: garold   (13.07.2010 в 11:33)
 

Даже так? И что вы хотите из многомерного массива и какого? О внимательности можно говорить только тогда, когда вы нарисуете свой массив, и объясните чего хотите. GROUP возвратит уникальные значения, а вы говорите о имени, и что тогда имя в вашем понимании?

  Ответить  
 
 автор: garold   (13.07.2010 в 11:56)   письмо автору
 
   для: sim5   (13.07.2010 в 11:39)
 

Допустим, нужно сгруппировать по category_id.
Array
(
    [0] => Array
        (
            [0] => 21
            [id] => 21
            [1] => 3
            [category_id] => 3
            [2] => Текст текст текст
            [description] => текст...........
            [3] => 2009-11-20
            [data] => 2009-11-20
            [4] => тоже текст
            [name_cat] => и тут текст
           
        )        
        
       [0] => Array
        (
            [0] => 22
            [id] => 2
            [1] => 3
            [category_id] => 3
            [2] => Текст текст текст
            [description] => текст...........
            [3] => 2009-11-20
            [data] => 2009-11-20
            [4] => тоже текст
            [name_cat] => и тут текст
           
        )   

)

  Ответить  
 
 автор: sim5   (13.07.2010 в 12:24)   письмо автору
 
   для: garold   (13.07.2010 в 11:56)
 

И что значит сгруппировать по вашему мнению в отношении этого массива?

  Ответить  
 
 автор: garold   (13.07.2010 в 12:27)   письмо автору
 
   для: sim5   (13.07.2010 в 12:24)
 

Тоже самое что и GROUP BY.

  Ответить  
 
 автор: sim5   (13.07.2010 в 12:33)   письмо автору
 
   для: garold   (13.07.2010 в 12:27)
 

Тогда выполняйте это прямо в запросе и не морочте голову.

  Ответить  
 
 автор: garold   (13.07.2010 в 12:41)   письмо автору
 
   для: sim5   (13.07.2010 в 12:33)
 

решили не заморачиваться? ))) Зачем тогда в дискуссию вступили)))

  Ответить  
 
 автор: sim5   (13.07.2010 в 12:51)   письмо автору
 
   для: garold   (13.07.2010 в 12:41)
 

А потому, что вы взяли этот массив из запроса, причем используя mysql_fetch_array, который совсем не к месту. А коли это запрос, и нужное можно получить в нем, то зачем делать лишние телодвижения?

  Ответить  
 
 автор: garold   (13.07.2010 в 13:11)   письмо автору
 
   для: sim5   (13.07.2010 в 12:51)
 

Спасибо,про fetch_array. Я использую класс из софтайм фреймворка, а там в постраничной навигации именно fetch_array.Уже исправил.
Я не могу это сделать в запросе, потому что нарушится логика. мне нужно подсчитать кол-во выводимых записей, а мой запрос использует join на вытаскивание подразделов,что, собственно, увеличивает кол-во выводимых запись.

  Ответить  
 
 автор: sim5   (13.07.2010 в 13:27)   письмо автору
 
   для: garold   (13.07.2010 в 13:11)
 

Я так понимаю, что группировку по category_id вы понимаете исключительно как вывод полученных записей под этой категорией? А если так, то ваши потуги насчет array_unique излишни, так как для вывода совсем не надо преобразовывать полученный массив, для этого достаточно отсортировать запрос по category_id, а вывод уже будет автоматом.

  Ответить  
 
 автор: Trianon   (13.07.2010 в 08:04)   письмо автору
 
   для: garold   (13.07.2010 в 05:41)
 

>Есть многомерный массив.

нету.

  Ответить  
 
 автор: sms-send   (13.07.2010 в 12:58)   письмо автору
 
   для: garold   (13.07.2010 в 05:41)
 

<?php

$arr 
=
array (
  
=> 
  array (
    
=> 21,
    
'id' => 21,
    
=> 3,
    
'category_id' => 3,
    
=> 'Текст текст текст',
    
'description' => 'текст...........',
    
=> '2009-11-20',
    
'data' => '2009-11-20',
    
=> 'тоже текст',
    
'name_cat' => 'и тут текст',
  ),
  
=> 
  array (
    
=> 22,
    
'id' => 2,
    
=> 3,
    
'category_id' => 3,
    
=> 'Текст текст текст',
    
'description' => 'текст...........',
    
=> '2009-11-20',
    
'data' => '2009-11-20',
    
=> 'тоже текст',
    
'name_cat' => 'и тут текст',
  ),
);


$grouped = array();
$groupBy 'category_id';
foreach(
$arr as $v)
{
    
$key $v[$groupBy];
        if(!
array_key_exists($key$grouped))
            
$grouped[$key] = array($v);
        else
            
$grouped[$key][] = $v;
}

  Ответить  
 
 автор: garold   (13.07.2010 в 13:12)   письмо автору
 
   для: sms-send   (13.07.2010 в 12:58)
 

О Спасибо!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования