Search code examples
phparraysmultidimensional-arraygroupingcounting

Group rows in a 2d array and count number of rows in each respective group


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 perhaps dump the results into something like Lucene or SQLite then run a query on that document on each page load?


Solution

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