0

我有一个看起来像这样的多维数组:

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
    )
)

我想用多维数组的每个数组中的所有关联元素创建一个新数组,并对重复键的值求和。

来自样本输入的期望结果:

array (
  'GB' => 35897,
  'US' => 3993,
  'ES' => 23,
  'AU' => 438,
  'DE' => 12,
  'MY' => 4,
  'QA' => 1,
  'VN' => 1,
  'SK' => 1,
  'FJ' => 1,
  'ME' => 1,
  'TR' => 1,
  'LV' => 1,
  'IE' => 1711,
  'PH' => 1071,
  'MT' => 578,
  'HR' => 241,
  'ZA' => 210,
  'FR' => 139,
)
4

3 回答 3

1

查看每个子数组,然后遍历键/值对。将它们添加到一个$final数组中:

$final = [];
foreach($masterArray as $subArray) {
    foreach($subArray AS $key => $value) {
        $final[$key] = isset($final[$key])
            ? $final[$key] + $value
            : $value;
    }
}

工作示例:https ://3v4l.org/6XBbD

于 2016-03-12T01:01:35.367 回答
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);
于 2016-03-12T00:56:17.553 回答
0

您可以通过将第一行数据“移出”输入数组并将关联元素直接推入输出数组来快速跟踪此任务。这消除了对第一行执行任何条件操作的需要,这将提高效率。

代码:(演示

$result = array_shift($array);
foreach ($array as $row) {
    foreach ($row as $key => $value) {
        $result[$key] = ($result[$key] ?? 0) + $value;
    }
}
var_export($result);

替代方案array_reduce():(演示

$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():(演示

$result = array_shift($array);
array_walk_recursive(
    $array,
    function($value, $key) use(&$result) {
        $result[$key] = ($result[$key] ?? 0) + $value;
    }
);
var_export($result);

作为 using 的副作用array_shift(),如果输入数组为空,则上述所有代码段的输出将null不是空数组。如果这对您的项目来说是一个交易破坏者,那么array_shift()用一个空数组替换 - Demo

于 2021-07-21T11:06:27.480 回答