php 实现groupby
实现 GROUP BY 功能的方法
在 PHP 中实现类似 SQL 的 GROUP BY 功能,可以通过数组操作或数据库查询完成。以下是几种常见方法:
使用数组操作实现 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);
使用 SQL 的 GROUP BY 语句
如果数据存储在数据库中,直接使用 SQL 的 GROUP BY 更高效:
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
$stmt = $pdo->query('SELECT category, SUM(value) as total FROM table_name GROUP BY category');
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
使用 Laravel 的集合方法
Laravel 框架提供了便捷的集合分组方法:
$collection = collect([
['category' => 'A', 'value' => 10],
['category' => 'B', 'value' => 20],
['category' => 'A', 'value' => 30]
]);
$grouped = $collection->groupBy('category');
使用 array_reduce 函数
通过高阶函数实现分组:
$grouped = array_reduce($data, function($result, $item) {
$result[$item['category']][] = $item;
return $result;
}, []);
分组后聚合计算
对分组后的数据进行聚合计算:

$aggregated = [];
foreach ($grouped as $category => $items) {
$aggregated[$category] = array_sum(array_column($items, 'value'));
}
选择哪种方法取决于数据来源和具体需求。数据库分组适合大数据量,数组操作适合已加载到内存的数据,框架方法提供了更多便捷功能。






