php 对二维数组的每列求和

ygya80vv  于 2023-01-04  发布在  PHP
关注(0)|答案(3)|浏览(229)

我需要一点帮助来计算二维数组中的列。
Eg多维数组

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

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

我希望有一个结果数组,它将保存两行的列和。

Array
(
    [0] => 80
    [1] => 9
    [2] => 14
    [3] => 11
    [4] => 12
    [5] => 15
    [6] => 11
    [7] => 7
)
ac1kyiln

ac1kyiln1#

这应该对你有用:

<?php

    $arr = array(
            array(30, 5, 6, 7, 8, 9, 2, 5), 
            array(50, 4, 8, 4, 4, 6, 9, 2)
        );

    $result = array();

    foreach($arr[0] as $k => $v)
        $result[$k] = array_sum(array_column($arr, $k));

    print_r($result);

?>

输出:

Array ( [0] => 80 [1] => 9 [2] => 14 [3] => 11 [4] => 12 [5] => 15 [6] => 11 [7] => 7 )
    • 编辑:**

如果你的php版本低于5.4,你可以使用这个简单的解决方法:

function arrayColumn(array $array, $column_key, $index_key=null){
    if(function_exists('array_column ')){
        return array_column($array, $column_key, $index_key);
    }
    $result = [];
    foreach($array as $arr){
        if(!is_array($arr)) continue;

        if(is_null($column_key)){
            $value = $arr;
        }else{
            $value = $arr[$column_key];
        }

        if(!is_null($index_key)){
            $key = $arr[$index_key];
            $result[$key] = $value;
        }else{
            $result[] = $value;
        }

    }

    return $result;
}

(Note必须使用arrayColumn()
From the manual comments: http://php.net/manual/de/function.array-column.php#116301

ru9i0ody

ru9i0ody2#

这应该适用于类似示例中的数组($arr是类似示例中的数组,为了简单起见,我没有在这里定义它):

$res = array();
foreach($arr as $value) {
    foreach($value as $key => $number) {
        (!isset($res[$key])) ?
            $res[$key] = $number :
            $res[$key] += $number;
    }
}

print_r($res);
pjngdqdw

pjngdqdw3#

这个答案肯定不适合PHP5.4。箭头函数语法从PHP7.4开始可用。
在输入array_map()时,使用spread运算符将输入2d数组解压缩为单独的行。这将从每行的每列发送多个值。在arrow函数的参数签名((...$col))内使用可变数据集合将生成包含所有列值的单个数组变量。将该数组输入array_sum()以获得所需结果。
代码:(Demo

$array = [
    [30, 5, 6, 7, 8, 9, 2, 5], 
    [50, 4, 8, 4, 4, 6, 9, 2]
];

var_export(
    array_map(
        fn(...$col) => array_sum($col),
        ...$array
    )
);

相关问题