在两个多维数组之间对应元素求和

3
假设我有两个数组,我想把它们对应的元素相加。
$v_4 = [
    [1, 2, 3], 
    [4, 5, 6],
];
$v_5 = [
    [7, 8, 9], 
    [10, 11, 12], 
];

我该如何构建一个加法函数,使得可以对这些数组进行加法运算,并输出以下结果:

[
    [8, 10, 12], 
    [14, 16, 18],
]

我知道我需要在这个多维情况下利用array_map,但我不确定如何继续。

2个回答

1
你可以使用


$new = array();
foreach(array_map(null, $v_4, $v_5) as $var) {
    $data = call_user_func_array("array_map", array_merge(array(null) , $var));
    $new[] = array_map("array_sum", $data);
}
print_r($new);

查看实时演示

以上示例仅限于2个数组...如果您有更多,如10,您可以稍微修改此函数来使用。

print_r(array_sum_colums($v_4,$v_5,$v_6));

或者

print_r(array_sum_colums(array($v_4,$v_5,$v_6)));

查看实时演示

功能

function array_sum_colums() {
    $args = count(func_get_args()) == 1 ? func_get_arg(0) : func_get_args();
    $arg = call_user_func_array("array_map", array_merge(array(null),$args));
    $new = array();
    foreach($arg as $var) {
        $data = call_user_func_array("array_map", array_merge(array(null), $var));
        $new[] = array_map("array_sum", $data);
    }
    return $new ;
}

请问可以解释一下array_merge(array(null), $var)吗? array(null)的重要性是什么,那时$var包含什么? - Micha Wiedenmann
array_mergeеҸӘжҺҘеҸ—ж•°з»„..... array(null)жҳҜеҗ‘ж•°з»„ж·»еҠ nullеҖјзҡ„дёҖз§Қж–№ејҸгҖӮжӮЁеҸҜд»ҘдҪҝз”Ёvar_dump($var)жқҘжҹҘзңӢеҸҳйҮҸеҢ…еҗ«зҡ„еҶ…е®№гҖӮ - Baba

0

同步地从两个数组中各自隔离出行,然后在每个行数据的分组有效载荷内对列求和。

array_map() 的外部调用将行从每个数组中隔离出来,array_map() 的内部调用将列从分组的行中隔离出来。

代码(演示

var_export(
    array_map(
        fn(...$row) =>
            array_map(
                fn(...$col) => array_sum($col),
                ...$row
            ),
        $v_4,
        $v_5
    )
);

一个更加高效的方法是使用嵌套循环,同步迭代每个数组中的每个元素。这种方法适用于您的样例数据,并且易于阅读。当然,这仅适用于两个数组具有完全相同的结构。
代码:(演示)
$result = [];
foreach ($v_4 as $i => $row) {
    foreach ($row as $k => $v) {
        $result[$i][$k] = $v + $v_5[$i][$k];
    }
}
var_export($result);

实际上,如果您在迭代时不介意修改第一个数组,您可以直接将第二个数组的相应值添加到第一个数组元素中。(演示)
foreach ($v_4 as $i => &$row) {
    foreach ($row as $k => &$v) {
        $v += $v_5[$i][$k];
    }
}
var_export($v_4);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接