我有一个从 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 />";
}
很明显,这并没有给我想要的结果,但我不确定如何按特定日期对信息进行分组,有人可以解释我如何做到这一点吗?
您需要循环数组,并将每种碳水化合物和蛋白质的总数添加到代表每个日期的变量或数组中,以获得该日期的总数:
$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
)
)