对具有 3 个级别的数组的每一列中的一列的数组值求和

Sum array values of a column within each column of an array with 3 levels

我正在尝试对多维数组列中的列使用 array_sum()

例如:我有一个如下所示的数组:

$array = [
    [['value' => 1100], ['value' => 1000], ['value' => 3000]],
    [['value' => 1200], ['value' => 2000], ['value' => 2000]],
    [['value' => 1300], ['value' => 4000], ['value' => 1000]],
];

我试过:

$arr = [];
foreach($array as $point){
   $arr[] = array_sum(array_column($array, $point[0]['value']));
}
print_r($arr);

但我期待这样的输出:

[['value' => 3600], ['value' => 7000], ['value' => 6000]]

或者更简单地说:[3600, 7000, 6000]

此处测试:https://onecompiler.com/php/3y3mxqky9

由于您希望垂直求和而不是水平求和,因此您使用的 array_column 样式将不起作用。您可以简单地使用如下所示的 2 个嵌套循环来实现此目的:

<?php

$arr = [];
foreach($array as $point){
   foreach($point as $k => $v){
      $arr[$k] = ($arr[$k] ?? 0) + $v['value'];
   }
}
print_r($arr); 

Online Demo

您可以这样对列求和:

foreach($array as $key => $point){
  $arr[] = array_sum(array_column( array_column($array,$key),'value'));
}
print_r($arr);

转置您的输入数组,然后分离并求和 value 列数据。

$arrayarray_map() 的可变参数是转置部分。

换句话说,array_map(fn(...$col) => $col, ...$array)将数据行转换为数据列。

代码:(Demo)

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

输出:

array (
  0 => 3600,
  1 => 7000,
  2 => 6000,
)