如何在多维数组中求和所有列值?

2022-08-30 06:59:57

如何按关联键添加所有列值?请注意,密钥集是动态的。

输入数组:

Array
(
    [0] => Array
        (
            [gozhi] => 2
            [uzorong] => 1
            [ngangla] => 4
            [langthel] => 5
        )

    [1] => Array
        (
            [gozhi] => 5
            [uzorong] => 0
            [ngangla] => 3
            [langthel] => 2
        )

    [2] => Array
        (
            [gozhi] => 3
            [uzorong] => 0
            [ngangla] => 1
            [langthel] => 3
        )
)

期望结果:

Array
(
    [gozhi] => 10
    [uzorong] => 1
    [ngangla] => 8
    [langthel] => 10
)

答案 1

您可以使用 array_walk_recursive() 来获取问题的一般情况解决方案(当每个内部数组可能具有唯一键时的解决方案)。

$final = array();

array_walk_recursive($input, function($item, $key) use (&$final){
    $final[$key] = isset($final[$key]) ?  $item + $final[$key] : $item;
});

一般情况下的 array_walk_recursive() 示例

另外,从 PHP 5.5 开始,您可以使用 array_column() 函数来实现您想要的确切键 [gozhi] 的结果,例如:

array_sum(array_column($input, 'gozhi')); 

指定键的 array_column() 示例

如果你想得到所有具有相同键的内部数组的总和(你发布的所需结果),你可以做这样的事情(记住,第一个内部数组必须具有与其他数组相同的结构):

$final = array_shift($input);

foreach ($final as $key => &$value){
   $value += array_sum(array_column($input, $key));
}    

unset($value);

array_column() 的示例,以防所有内部数组都具有相同的键

如果你想要一个使用array_column()的一般情况解决方案,那么首先你可以考虑获取所有唯一键,然后获取每个键的总和:

$final = array();

foreach($input as $value)
    $final = array_merge($final, $value);

foreach($final as $key => &$value)
    $value = array_sum(array_column($input, $key));

unset($value);

一般情况下的 array_column() 示例


答案 2
$sumArray = array();

foreach ($myArray as $k=>$subArray) {
  foreach ($subArray as $id=>$value) {
    $sumArray[$id]+=$value;
  }
}

print_r($sumArray);