如何有条件地对这个多维数组中的元素求和?
从这个数组中,只有当
taskID
为空时,我才会对项目求和。
Array
(
[data] => Array
(
[0] => Array
(
[taskID] =>
[hours] => 1
)
[1] => Array
(
[taskID] => 12345
[hours] => 1
)
[2] => Array
(
[taskID] =>
[hours] => 2
)
)
)
到目前为止我尝试过的:
array_sum(array_column($datas, 'hours'));
但是我不知道如何添加条件性的东西。
array_filter
和 array_sum
与 array_column
: 实现相同的结果
array_filter
用于根据taskID
为空的条件过滤数组。然后,array_column
从过滤后的数组中提取hours
,array_sum
计算这些小时的总和:
$filteredArray = array_filter($array['data'], function($item) {
return $item['taskID'] === '';
});
$sum = array_sum(array_column($filteredArray, 'hours'));
简单来说,迭代数组,将
hours
累加到 $sum
变量中,其中 taskID
为空:
<?php
$array = array(
'data' => array(
array(
'taskID' => '',
'hours' => 1
),
array(
'taskID' => 12345,
'hours' => 1
),
array(
'taskID' => '',
'hours' => 2
)
)
);
$sum = 0;
foreach ($array['data'] as $item) {
if ($item['taskID'] === '') {
$sum += $item['hours'];
}
}
echo "The sum of hours where taskID is empty is: " . $sum; //The sum of hours where taskID is empty is: 3
?>
使用单个循环时,将小时值乘以任务 ID 的负值 - 该负值会将所有 false 值转换为 1,将所有非 false 值转换为 0。然后以相同的方式继续求和。
代码:(演示)
$sum = 0;
foreach ($array['data'] as $row) {
$sum += $row['hours'] * !$row['taskID'];
}
echo $sum;