合并两个二维数组并对相交元素求和

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

我需要对两个数组的关键路径相交处的值求和。阵列将具有完全相同的形状和大小。

我的示例输入数组:

$arr1 = [
    [3206.63, 815.47],
    [5024.71, 803.73],
    [3290.36, 625.02],
];

$arr2 = [
    [3138.87, 819.8],
    [5000.24, 810.87],
    [3221.15, 668.58],
];

想要的结果:

[
    [6345.5, 1635.27],
    [10024.95, 1614.6],
    [6511.51, 1293.6]
]
php arrays multidimensional-array merge sum
2个回答
1
投票

循环第一个数组并使用其键同步访问第二个数组中的值。

$sums = array();

foreach ($arr1 as $key => $value) {
    $sums[$key][] = $arr1[$key][0] + $arr2[$key][0];
    $sums[$key][] = $arr1[$key][1] + $arr2[$key][1];
}

print_r($sums);

0
投票

在函数式脚本中,同步迭代两个数组的行,然后迭代每行的列并对这些独立的列值求和。

代码:(演示

print_r(
    array_map(
        fn(...$rows) => array_map(
            fn(...$col) => array_sum($col),
            ...$rows
        ),
        $arr1,
        $arr2
    )
);

对于经典的嵌套循环,将第一个数组复制到结果数组(没有理由迭代它),然后根据其键路径将第二个数组的值添加到结果数据。

代码:(演示

$result = $arr1;
foreach ($arr2 as $i => $row) {
    foreach ($row as $k => $v) {
        $result[$i][$k] += $v;
    }
}
print_r($result);
© www.soinside.com 2019 - 2024. All rights reserved.