如何在PHP中对多维数组的列求和

时间:2012-11-20 13:48:35

标签: php

我有一个像

这样的数组
Array
(
    [A1] => Array
        (
            [1] => 1
            [2] => 0
            [3] => 0
            [4] => 0
            [5] => 0
            [6] => 0
            [7] => 0
            [8] => 0
            [9] => 0
            [10] => 0
         )
      [A2] => Array
        (
            [1] => 1
            [2] => 1
            [3] => 0
            [4] => 0
            [5] => 0
            [6] => 0
            [7] => 0
            [8] => 0
            [9] => 0
            [10] => 0
        )
       [A3] => Array
        (
            [1] => 0
            [2] => 0
            [3] => 0
            [4] => 0
            [5] => 0
            [6] => 0
            [7] => 0
            [8] => 0
            [9] => 0
            [10] => 0
       )
)

我想按列添加。

我想要这样回答:

[sum] => Array
    (
        [1] => 2
        [2] => 1 
        [3] => 0
        [4] => 0
        [5] => 0
        [6] => 0
        [7] => 0
        [8] => 0
        [9] => 0
        [10] => 0
   )

php中是否有任何数组函数可以执行此操作?否则我怎么能这样做?

4 个答案:

答案 0 :(得分:2)

总是有自定义代码:

function array_sum_rows($arr) {
    $out = array();
    foreach ($arr as $row) {
        foreach ($row as $i => $val) {
            $out[$i] = isset($out[$i]) ? $out[$i] + $val : $val;
        }
    }
    return $out;
}

答案 1 :(得分:0)

$multiArray = ... //your array
$sumArray = array();
$i = 1;

foreach ($multiArray as $key => $array) {
    $sumArray[$i] = array_sum($array);
    $i++;
}

这适用于您的阵列。你会得到一个数组

http://php.net/manual/en/function.array-sum.php

答案 2 :(得分:0)

不幸的是丢失了转置中的实际索引:

function array_transpose($arr) {
    return call_user_func_array(
        'array_map',
        array_merge(
            array(NULL),
            $arr
        )
    );
}

$transposedArray = array_transpose($myData);
$result = array_map('array_sum', $transposedArray);
var_dump($result);

但索引可以通过

恢复
$result = array_combine(array_keys(end($myData)), $result);

答案 3 :(得分:0)

“转置”输入数组(将数据旋转 90 度,使列变成行),然后将新的“行”提供给 array_map(),以便每个都调用 array_sum()

代码:(Demo)

$array = [
    'A1' => [1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    'A2' => [1, 1, 0, 0, 0, 0, 0, 0, 0, 0],
    'A3' => [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
];

var_export(array_map('array_sum', array_map(null, ...array_values($array))));

*在展开运算符 (array_values()) 之前调用 ... 是必要的,直到使用不会被字符串键阻塞的 php 版本。

产生平面输出数组:[2, 1, 0, 0, 0, 0, 0, 0, 0, 0]

相关问题