我需要合并和求和两个二维数组,以便共享相同键路径的值被求和在一起。
$a = [[1, 2], [7, 2]];
$b = [[2, 3], [4, 9]];
我想要的结果:
[[3, 5], [11, 11]];
数组映射和数组总和:
$c[0] = array_map(function () {
return array_sum(func_get_args());
}, $a[0], $b[0]);
$c[1] = array_map(function () {
return array_sum(func_get_args());
}, $a[1], $b[1]);
进一步阅读:
嵌套循环:
$c = array();
for($x = 0; $x <= 1; $x++){
for($i=0;$i<count($a);$i++) {
$c[$x][$i] = $a[$x][$i]+$b[$x][$i];
}
}
嵌套循环的函数式方法如下所示。可变参数/扩展点 (
...
) 有两个用途 - 在 fn(...)
中,它们将不确定数量的值累积到单个变量中作为数组;或者使用 ...$rows
扩展运算符将索引数组扩展为单独的值,作为内部 array_map()
调用的输入。
代码:(演示)
var_export(
array_map(
fn(...$rows) => array_map(
fn(...$cells) => array_sum($cells),
...$rows
),
$a,
$b
)
);
如果该语法太难理解,经典的嵌套
foreach()
循环也可以完成这项工作。事实上,它更适合处理可能存在在其他数组中没有关联值的元素的数据集。
代码:(演示)
$result = $a;
foreach ($b as $i => $row) {
foreach ($row as $j => $cell) {
$result[$i][$j] = ($result[$i][$j] ?? 0) + $cell;
}
}
var_export($result);