繁体   English   中英

如何对多维数组的列求和?

[英]How to Sum Columns of a Multi-Dimensional 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]
];

我想添加列值并生成总和的平面数组。

我想要这样的答案:

[2, 1, 0, 0, 0, 0, 0, 0, 0, 0]

php中是否有任何数组函数可以做到这一点? 否则我怎么能做到这一点?

总是有自定义代码:

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;
}
$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

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

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

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

代码:(演示

$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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM