Группировка массивов в PHP

У меня есть массив из 200 предметов. Я хотел бы выводить массив, но группировать элементы с общим значением. Подобно методу GROUP BY SQL. Это должно быть относительно легко сделать, но мне также нужен счет для элементов группы.

У кого-нибудь есть эффективный способ сделать это? Это произойдет при каждой загрузке страницы, поэтому мне нужно, чтобы она была быстрой и масштабируемой.

Могу ли я предварять сбрасывать результаты во что-то вроде Lucene или sqlite, а затем запускать запрос на этот документ при каждой загрузке страницы?

Любые мысли были бы весьма признательны.

Solutions Collecting From Web of "Группировка массивов в PHP"

Просто перебирайте массив и используйте другой массив для групп. Он должен быть достаточно быстрым и, вероятно, быстрее, чем накладные расходы при использовании sqlite или аналогичного.

$groups = array(); foreach ($data as $item) { $key = $item['key_to_group']; if (!isset($groups[$key])) { $groups[$key] = array( 'items' => array($item), 'count' => 1, ); } else { $groups[$key]['items'][] = $item; $groups[$key]['count'] += 1; } } 
 $groups = array(); foreach($items as $item) $groups[$item['value']][] = $item; foreach($groups as $value => $items) echo 'Group ' . $value . ' has ' . count($items) . ' ' . (count($items) == 1 ? 'item' : 'items') . "\n"; 

Вот краткий пример:

 $a = array(1, 2, 3, 1, 2, 3, 3, 2, 3, 2, 3, 4, 4, 1); $n = array_count_values($a); arsort($n); 

print_r ($ п);

Массив ([3] => 5 [2] => 4 [1] => 3 [4] => 2)

 $aA = array_count_values(array(1,2,3,4,5,1,2,3,4,5,6,1,1,1,2,2)); $aB = array(); foreach($aA as $index=>$aux){ array_push($aB,$index); } print_r($aB); 

Результат:

 Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 ) 
 "$Switches" Array with [3] elements 0 SwitchID 1 name k  type output displayAs button value on groupname group1 1 Array [6] 2 Array [6] // this will sort after groupname $result = array(); $target = count($Switches); for($i=0;$i<$target;$i++) { $groupname = $Switches[$i]["groupname"]; $result[$groupname][] = $Switches[$i]; } // count amount of groups $groupCount = count($result); 

… или я что-то пропустил?