按列对二维数组的行进行分组,并对每组中的各个列进行求和[重复]

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

我有一个从 SQL 查询中返回的数组,当我这样做时它看起来像这样

print_r
:

Array(
    [0] => Array(
        [id] => 1,
        [protein] => 20,
        [carbs] => 64,
        [date] => 2014-02-24
    ),
    [1] => Array(
        [protein] => 1,
        [carbs] => 12,
        [score2] => 8,
        [date] => 2014-02-24
    ),
    [2] => Array(
        [id] => 1,
        [protein] => 47,
        [carbs] => 84,
        [date] => 2014-02-25
    )
)

现在我想要对这个数组做的是将每个特定日期的碳水化合物和蛋白质值相加。因此,以

2014-02-24
为例,我希望
carb
protein
值等于
21
76
。到目前为止,我可以访问 foreach 循环中的每个单独值,但我不确定如何将它们保存到特定日期。这是我正在使用的循环:

foreach ($res as $row) {
   echo $row['protein'] . "<br />" . $row['carbs'] . "<br />" . $row['date'] . "<br />";
}

很明显,这并没有给我想要的结果,但我不确定如何按特定日期对信息进行分组,有人可以解释我如何做到这一点吗?

php arrays multidimensional-array sum grouping
1个回答
1
投票

您需要循环数组,并将每种碳水化合物和蛋白质的总数添加到代表每个日期的变量或数组中,以获得该日期的总数:

$grouped = array();
foreach($res as $row) {
    if(!array_key_exists($row['date'], $grouped)) // create array key if it doesnt exist
        $grouped[$row['date']] = array('protein' => 0, 'carbs' => 0);

    $grouped[$row['date']]['protein'] += $row['protein']; // sum for each date
    $grouped[$row['date']]['carbs'] += $row['carbs'];
}

print_r($grouped);

输出示例:

Array(
    [2014-02-24] => Array(
        [protein] => 21
        [carbs] => 76
    )
    [2014-02-25] => Array(
        [protein] => 47
        [carbs] => 84
    )
)
© www.soinside.com 2019 - 2024. All rights reserved.