Php 按日期分组值
我有一个从SQL查询返回的数组,当我执行Php 按日期分组值,php,foreach,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]=&
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))
现在我想对这个数组做的是把每个特定日期的碳水化合物和蛋白质值相加。因此,我希望carb
和protein
的值等于21
和76
。到目前为止,我可以访问foreach循环中的每个值,但我不确定如何将这些值保存到特定日期。以下是我正在使用的循环:
foreach ($res as $row) {
echo $row['protein'] . "<br />" . $row['carbs'] . "<br />" . $row['date'] . "<br />";
}
foreach($res作为$row){
echo$row['protein'].“
”。$row['carbs'.”
.“$row['date'.”
”;
}
很明显,这并没有给出我想要的结果,但我不确定如何按某个日期对信息进行分组,有人能解释一下我是如何做到这一点的吗?您需要循环数组,将每个碳水化合物和蛋白质的总数添加到代表每个日期的变量或数组中,以获得该日期的总数:
$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
)
)
您想要的是在SQL查询中完成,而不是使用代码。@Prix我只是在尝试您的答案,它只在一天内有效。如果你能再发一次,那会很有帮助的。我只是在php上提出它,因为我有一个相当复杂的SQL。你的解决方案看起来是这样的,告诉我我是否犯了错误<代码>选择SUM(蛋白质)作为蛋白质,SUM(碳水化合物)作为碳水化合物,日期从tbl1作为tb1右连接tbl2作为tb2 ON(tb1.e_id=tb2.e_id)左连接tbl3作为tb3 ON(tb2.m_id=tb3.m_id),其中tb1.date IN(“2014-02-27”、“2014-02-26”、“2014-02-25”)tb1.user_id=1如果不进一步了解数据库中的数据结构,就很难告诉您,但是查看所有连接,您的表似乎设计得不好。