Grouping arrays in PHP

GivP picture GivP · Jun 11, 2009 · Viewed 36.2k times · Source

I have an array of 200 items. I would like to output the array but group the items with a common value. Similar to SQL's GROUP BY method. This should be relatively easy to do but I also need a count for the group items.

Does anyone have an efficient way of doing this? This will happen on every page load so I need it to be fast and scalable.

Could I prehaps dump the results into something like Lucene or sqlite then run a query on that document on each page load?

Any thoughts would be greatly appreciated.

Answer

Ferdinand Beyer picture Ferdinand Beyer · Jun 11, 2009

Just iterate over the array and use another array for the groups. It should be fast enough and is probably faster than the overhead involved when using sqlite or similar.

$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;
    }
}