对多维数组的一列中的值求和,其中相应行中的另一列为空

问题描述 投票:0回答:3

如何有条件地对这个多维数组中的元素求和?

从这个数组中,只有当

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

但是我不知道如何添加条件性的东西。

php arrays multidimensional-array sum array-column
3个回答
0
投票

另一种方法使用

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

0
投票

简单来说,迭代数组,将

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

?>

0
投票

使用单个循环时,将小时值乘以任务 ID 的负值 - 该负值会将所有 false 值转换为 1,将所有非 false 值转换为 0。然后以相同的方式继续求和。

代码:(演示

$sum = 0;
foreach ($array['data'] as $row) {
    $sum += $row['hours'] * !$row['taskID'];
}
echo $sum;
© www.soinside.com 2019 - 2024. All rights reserved.