php 实现groupby
在PHP中实现类似SQL的GROUP BY功能可以通过多种方式完成,以下是几种常见方法:
使用数组循环分组
通过遍历数组并手动构建分组结构:
$data = [
['category' => 'A', 'value' => 10],
['category' => 'B', 'value' => 20],
['category' => 'A', 'value' => 30]
];
$grouped = [];
foreach ($data as $item) {
$key = $item['category'];
if (!isset($grouped[$key])) {
$grouped[$key] = [];
}
$grouped[$key][] = $item;
}
print_r($grouped);
使用array_reduce函数
通过高阶函数实现更简洁的分组:
$grouped = array_reduce($data, function($result, $item) {
$result[$item['category']][] = $item;
return $result;
}, []);
使用Collection类(Laravel等框架)
在Laravel框架中可以直接使用集合的groupBy方法:
$collection = collect($data);
$grouped = $collection->groupBy('category')->toArray();
数据库查询时直接分组
如果数据来自数据库,建议直接在SQL中分组:
$pdo->query("SELECT category, COUNT(*) as count FROM table GROUP BY category");
多维数组分组
对多级分组需求可以使用复合键:
$grouped = [];
foreach ($data as $item) {
$key = $item['category'].'|'.$item['subcategory'];
$grouped[$key][] = $item;
}
每种方法适用于不同场景,简单数组操作适合小数据集,数据库分组效率最高,Collection类提供最丰富的链式操作方法。







