我想要这两个数组的和。
第一个阵列:
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个数组,而不是使用=
使用+=
。
希望这能有所帮助!