对两个二维数组之间具有相同键路径的值求和

问题描述 投票:0回答:2

我需要合并和求和两个二维数组,以便共享相同键路径的值被求和在一起。

$a = [[1, 2], [7, 2]];
$b = [[2, 3], [4, 9]];

我想要的结果:

[[3, 5], [11, 11]];
php arrays multidimensional-array sum mapping
2个回答
1
投票

数组映射和数组总和:

$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];
  }
}

0
投票

嵌套循环的函数式方法如下所示。可变参数/扩展点 (

...
) 有两个用途 - 在
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);
© www.soinside.com 2019 - 2024. All rights reserved.