对具有 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]
由于您希望垂直求和而不是水平求和,因此您使用的 array_column 样式将不起作用。您可以简单地使用如下所示的 2 个嵌套循环来实现此目的:
<?php
$arr = [];
foreach($array as $point){
foreach($point as $k => $v){
$arr[$k] = ($arr[$k] ?? 0) + $v['value'];
}
}
print_r($arr);
您可以这样对列求和:
foreach($array as $key => $point){
$arr[] = array_sum(array_column( array_column($array,$key),'value'));
}
print_r($arr);
转置您的输入数组,然后分离并求和 value
列数据。
$array
到 array_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,
)
我正在尝试对多维数组列中的列使用 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]
由于您希望垂直求和而不是水平求和,因此您使用的 array_column 样式将不起作用。您可以简单地使用如下所示的 2 个嵌套循环来实现此目的:
<?php
$arr = [];
foreach($array as $point){
foreach($point as $k => $v){
$arr[$k] = ($arr[$k] ?? 0) + $v['value'];
}
}
print_r($arr);
您可以这样对列求和:
foreach($array as $key => $point){
$arr[] = array_sum(array_column( array_column($array,$key),'value'));
}
print_r($arr);
转置您的输入数组,然后分离并求和 value
列数据。
$array
到 array_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,
)