
本文介绍如何在 PHP 中对多维数组按 color 键分组,并对 val、val1、val2 等数值字段进行求和,最终得到每个颜色对应的聚合结果,适用于报表统计、数据清洗等场景。
本文介绍如何在 php 中对多维数组按 `color` 键分组,并对 `val`、`val1`、`val2` 等数值字段进行求和,最终得到每个颜色对应的聚合结果,适用于报表统计、数据清洗等场景。
在实际开发中,我们常需对具有相同分类标识(如 color)的数组项进行数值聚合。本例要求:将原始数组中所有 color 值相同的子数组,对其 val、val1、val2 字段分别累加,生成去重且汇总后的新结构。
核心思路是以 color 为分组键,构建关联数组缓存各字段的累计值。使用 foreach 遍历原数组,对每个目标字段(val/val1/val2)执行“读取当前值 + 当前项值 → 写回”的原子操作。为避免未定义索引警告,推荐使用空合并运算符 ?? 0 安全获取初始值。
以下是完整可运行示例代码:
<?php
$array = [
['color' => 'red', 'val' => 4, 'val1' => 4, 'val2' => 4],
['color' => 'green', 'val' => 3, 'val1' => 3, 'val2' => 3],
['color' => 'blue', 'val' => 1, 'val1' => 3, 'val2' => 3],
['color' => 'green', 'val' => 6, 'val1' => 3, 'val2' => 3],
['color' => 'blue', 'val' => 2, 'val1' => 3, 'val2' => 3],
];
$grouped = [];
foreach ($array as $item) {
$color = $item['color'];
foreach (['val', 'val1', 'val2'] as $field) {
$grouped[$color][$field] = ($grouped[$color][$field] ?? 0) + $item[$field];
}
}
// 可选:转换为带 color 键的标准数组列表(匹配期望输出格式)
$result = [];
foreach ($grouped as $color => $values) {
$result[] = array_merge(['color' => $color], $values);
}
print_r($result);
?>输出结果:
立即学习“PHP免费学习笔记(深入)”;
Array
(
[0] => Array
(
[color] => red
[val] => 4
[val1] => 4
[val2] => 4
)
[1] => Array
(
[color] => green
[val] => 9
[val1] => 6
[val2] => 6
)
[2] => Array
(
[color] => blue
[val] => 3
[val1] => 6
[val2] => 6
)
)✅ 注意事项:
- 确保所有待累加字段均为数值类型(整型或浮点型),否则可能引发隐式类型转换异常;必要时可用
(int)或floatval()显式转换。 - 若字段名不固定或需动态传入,可将
['val', 'val1', 'val2']替换为函数参数,提升复用性。 - 对于超大数据集,此方法时间复杂度为 O(n×m)(n 为数组长度,m 为需聚合字段数),性能优良,无需额外排序或递归。
该方案简洁、健壮、易于理解,是 PHP 数组分组聚合的经典实践方式。



















