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

Это код прокси / заглушки, который содержит нестандартные маршаллеры данных, необходимые для передачи данных между различными квартирами (связанные с многопоточностью). Он используется, когда приложение, которое вызывает ваш COM-объект, использует другую модель COM-потоков. В мастере ATL / COM была возможность слить этот код в основную библиотеку. Во многих распространенных сценариях вам не нужно беспокоиться об этом (то есть, когда ваша dll COM работает в контексте клиента), если вы не хотите написать собственный маршаллер.

14
задан gobernador 11 June 2012 в 22:46
поделиться

3 ответа

Просто выполните итерацию по массиву и используйте другой массив для групп. Он должен быть достаточно быстрым и, вероятно, быстрее, чем накладные расходы, связанные с использованием 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;
    }
}
30
ответ дан 1 December 2019 в 06:18
поделиться
$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";
14
ответ дан 1 December 2019 в 06:18
поделиться

Вот быстрый пример:

$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 ($ n);

Array ( [3] => 5 [2] => 4 [1] => 3 [4] => 2)

3
ответ дан 1 December 2019 в 06:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: