PHP二维数组按二级键分组,对相同键对应的值求和
解决方案:合并二维关联数组并按键求和
没问题,我来帮你搞定这个PHP数组求和的需求!我们可以通过遍历累加的方式,轻松把所有子数组中相同键的值合并求和,最终得到一维关联数组。
基础循环实现(易懂直观)
这种写法逻辑清晰,适合新手理解,能完美处理所有存在的键,不管它是不是在每个子数组里都出现:
$array = [ ['x1' => 1, 'x2' => 3, 'y5' => 9], ['x1' => 3, 'x4' => 1, 'y5' => 1], ['x1' => 1, 'x8' => 5, 'a5' => 2], ['x1' => 2, 'x10' => 3, 'b5' => 5], ]; $newarray = []; // 遍历原始数组中的每个子数组 foreach ($array as $subArray) { // 逐个处理子数组里的键值对 foreach ($subArray as $key => $value) { // 键已存在就累加,不存在就直接赋值 if (isset($newarray[$key])) { $newarray[$key] += $value; } else { $newarray[$key] = $value; } } } print_r($newarray);
运行后会输出你想要的结果:
Array ( [x1] => 7 [x2] => 3 [y5] => 10 [x4] => 1 [x8] => 5 [a5] => 2 [x10] => 3 [b5] => 5 )
简洁函数式写法(PHP7+适用)
如果习惯函数式编程,用array_reduce配合空合并运算符??可以让代码更紧凑,效果完全一致:
$newarray = array_reduce($array, function($carry, $item) { foreach ($item as $key => $value) { // 用??简化“键不存在则取0”的判断 $carry[$key] = ($carry[$key] ?? 0) + $value; } return $carry; }, []);
内容的提问来源于stack exchange,提问作者Cananau Cristian
相关产品推荐
相关产品推荐

