2014-02-28 159 views
0

我有一个数组,我得到一个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

你想要什么是最好的SQL查询而不是代码。 – Prix

+0

@Prix我只是在尝试你的答案,它只在一天内有效。如果您可以再次发布这将有所帮助。我只提出它在PHP上,因为我有一个相当复杂的SQL。它看起来像你的解决方案告诉我,如果我犯了一个错误。 (tb1.e_id = tb2.e_id)LEFT JOIN tbl3 AS tb3 ON(tb2.m_id = tb3.m_id)(tb2.m_id = tb3.m_id)(选择SUM(蛋白质)AS蛋白质,SUM(碳水化合物)AS碳水化合物,日期来自tbl1 AS tb1 RIGHT JOIN tbl2 AS tb2 ON )WHERE tb1.date IN(“2014-02-27”,“2014-02-26”,“2014-02-25”)AND tb1.user_id = 1' – user3144542

+0

不知道您的数据结构是如何在数据库上它很难告诉你,但看着你所有的连接,看起来你的桌子设计不好。 – Prix

回答

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