所以我有一个看起来像这样的多维数组:
Array
(
[0] => Array
(
[GB] => 20827
[US] => 73
[ES] => 23
[AU] => 15
[DE] => 12
[MY] => 4
[QA] => 1
[VN] => 1
[SK] => 1
[FJ] => 1
[ME] => 1
[TR] => 1
[LV] => 1
)
[1] => Array
(
[GB] => 15070
[US] => 3920
[IE] => 1711
[PH] => 1071
[MT] => 578
[AU] => 423
[HR] => 241
[ZA] => 210
[FR] => 139
)
)
我想创建一个新数组,其中包含多维数组的每个数组中的所有键以及值的总和。
这是我的目标,TOTAL就是总和:
Array
(
[GB] => TOTAL
[US] => TOTAL
[ES] => TOTAL
[AU] => TOTAL
[DE] => TOTAL
[MY] => TOTAL
[QA] => TOTAL
[VN] => TOTAL
[SK] => TOTAL
[FJ] => TOTAL
[ME] => TOTAL
[TR] => TOTAL
[LV] => TOTAL
[IE] => TOTAL
[PH] => TOTAL
[MT] => TOTAL
[HR] => TOTAL
[ZA] => TOTAL
[FR] => TOTAL
)
答案 0 :(得分:1)
查看每个子数组,然后遍历键/值对。将它们添加到$final
数组中:
$final = [];
foreach($masterArray as $subArray) {
foreach($subArray AS $key => $value) {
$final[$key] = isset($final[$key])
? $final[$key] + $value
: $value;
}
}
答案 1 :(得分:0)
或许类似
$array = count($array1) > count($array2) ? $array1 : $array2;
$otherArray = count($array1) > count($array2) ? $array2 : $array1;
array_walk($array, function(&$value, $key, $otherArray) {
$value = $value + (isset($otherArray[$key]) ? $otherArray[$key] : 0);
}, $otherArray);
答案 2 :(得分:0)
您可以通过将第一行数据从输入数组中“移出”并将关联元素直接推送到输出数组中来快速跟踪此任务。这消除了对第一行执行任何条件操作的需要,这将提高效率。
代码:(Demo)
$result = array_shift($array);
foreach ($array as $row) {
foreach ($row as $key => $value) {
$result[$key] = ($result[$key] ?? 0) + $value;
}
}
var_export($result);
用 array_reduce()
替代:(Demo)
$result = array_shift($array);
var_export(
array_reduce(
$array,
function($result, $row) {
foreach ($row as $key => $value) {
$result[$key] = ($result[$key] ?? 0) + $value;
}
return $result;
},
$result
)
);
替代 array_merge_recursive()
:(Demo)
$result = array_shift($array);
array_walk_recursive(
$array,
function($value, $key) use(&$result) {
$result[$key] = ($result[$key] ?? 0) + $value;
}
);
var_export($result);
作为使用 array_shift()
的副作用,如果输入数组为空,则上述所有片段的输出将是 null
而不是空数组。如果这对您的项目造成破坏,则将 array_shift()
替换为空数组 -- Demo。