2014-02-28 201 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 
    ) 
)