按日期对值进行分组

时间:2014-02-28 00:17:44

标签: php foreach

我有一个从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我希望carbprotein值等于2176。到目前为止,我可以访问foreach循环中的每个单独的值,但我不知道如何将这些值保存到特定日期。这是我正在使用的循环:

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

所以很明显这不会给我我想要的结果,但我不知道如何在某个日期之前对信息进行分组,有人可以解释我该如何做到这一点吗?

1 个答案:

答案 0 :(得分: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
    )
)