三维数组求和PHP


Three Dimensional Array Sum PHP

我想要这两个数组的和。

第一个阵列:

Array(
[abc] => Array
    (
    [yesterday] => 20
    [today] => 50
    [tomorrow] => 70
    )
[pqr] => Array
    (
    [yesterday] => 10
    [today] => 20
    [tomorrow] => 30
    )
[xyz] => Array
    (
    [yesterday] => 30
    [today] => 20
    [tomorrow] => 10
    )
)

第二阵列:

Array(
[abc] => Array
    (
    [yesterday] => 70
    [today] => 20
    [tomorrow] => 50
    )
[pqr] => Array
    (
    [yesterday] => 20
    [today] => 30
    [tomorrow] => 10
    )
[xyz] => Array
    (
    [yesterday] => 10
    [today] => 30
    [tomorrow] => 20
    )
)

两个阵列的总和:

Array(
[abc] => Array
    (
    [yesterday] => 90
    [today] => 70
    [tomorrow] => 120
    )
[pqr] => Array
    (
    [yesterday] => 30
    [today] => 50
    [tomorrow] => 40
    )
[xyz] => Array
    (
    [yesterday] => 40
    [today] => 50
    [tomorrow] => 30
    )
)
$b['yesterday'] = array_sum(array_column($a,'yesterday'));
$b['today'] = array_sum(array_column($a,'today'));
...

我希望这能给我一个想法。我知道这个代码不是最终结果。

这应该适用于您:

在这里,我用array_map()遍历了$arr1$arr2的每个innerArray。然后,我再次遍历innerArray的每个值,并将它们与array_map()相加。之后,我将返回的数组与innerArray与array_combine()的键组合在一起。最后,我将数组与$arr1的键再次组合。

<?php
    $arr1 = [
            "abc" => [
                "yesterday" => 20,
                "today" => 50,
                "tomorrow" => 70
            ],
            "pqr" => [
                "yesterday" => 10,
                "today" => 20,
                "tomorrow" => 30
            ],
            "xyz" => [
                "yesterday" => 30,
                "today" => 20,
                "tomorrow" => 10
            ]
        ];
    $arr2 = [
            "abc" => [
                "yesterday" => 70,
                "today" => 20,
                "tomorrow" => 50
            ],
            "pqr" => [
                "yesterday" => 20,
                "today" => 30,
                "tomorrow" => 10
            ],
            "xyz" => [
                "yesterday" => 10,
                "today" => 30,
                "tomorrow" => 20
            ]
        ];  

    $result = array_combine(array_keys($arr1), array_map(function($a1, $a2){
        return array_combine(array_keys($a1), array_map(function($v1, $v2){ return $v1+$v2;}, $a1, $a2));
    }, $arr1, $arr2));

    print_r($result);

?>

输出:

Array
(
    [abc] => Array
        (
            [yesterday] => 90
            [today] => 70
            [tomorrow] => 120
        )
    [pqr] => Array
        (
            [yesterday] => 30
            [today] => 50
            [tomorrow] => 40
        )
    [xyz] => Array
        (
            [yesterday] => 40
            [today] => 50
            [tomorrow] => 30
        )
)
$output = array();
foreach ($array1 as $index => $value) {
    $output[$index]['yesterday'] = ($array2[$index]['yesterday'] + $value['yesterday']);
    $output[$index]['today'] = ($array2[$index]['today'] + $value['today']);
    $output[$index]['tomorrow'] = ($array2[$index]['tomorrow'] + $value['tomorrow']);
}

这可能不是最漂亮的解决方案,但我认为,使用此解决方案和@Rizier123的解决方案可以将所有内容封装在一个函数中,并使用以下函数蓝图function sumArrays($array1, $array2, &output)一次传递2个数组,而不是使用=使用+=

希望这能有所帮助!