2016-03-04 122 views
0

我有2個數據庫對象,它們隨時間爲我提供數據。但結果不一定有相同的日期。用戶可能有一天只進入他們的體重,或另一天進入體重或同一天進入體內。合併2個數組/對象,其中日期匹配並插入非匹配

weight_history
日期 - 量
星期三2016年3月2日 - 194.00
星期三2016年3月3日 - 205.40

bodyfat_history
日期 - 量
星期三2016年3月1日 - 24.80
星期三2016年3月2日 - 22.80

我想繪製這些數據,所以我需要合併那些匹配的日子,然後在剩下的零點ng值,他們沒有。

我沒有把握的邏輯是我如何添加其他人來獲得完整的數據集。

這是我的代碼,用於合併數據和抓取剩餘的重量結果。什麼是最好的方式來添加身體脂肪的結果,以及不匹配。如果我在嵌套循環內執行它們,數據將被多次添加。

foreach(array_reverse($weight_history->result()) as $row): 
    foreach(array_reverse($bodyfat_history->result()) as $row2): 
     if(date("F j, Y", $row->date) == date("F j, Y", $row2->date)){ 
      $results[date("F j, Y", $row->date)]['weight'] = $row->amount; 
      $results[date("F j, Y", $row->date)]['bodyfat'] = $row2->amount; 
     } 
     $results[date("F j, Y", $row->date)]['weight'] = $row->amount; 
    endforeach; 
endforeach; 

這是我以後的結果集。

日 - 重 - 體脂
週三2016年3月1日 - 空 - 24.80
星期三2016年3月2日 - 194.00 - 22.80
週三2016年3月3日 - 205.40 - 空

回答

1

你不需要嵌套循環,嘗試:

foreach($weight_history->result() as $row) 
    $results[date("F j, Y", $row->date)]['weight'] = $row->amount; 
foreach($bodyfat_history->result() as $row) 
    $results[date("F j, Y", $row->date)]['bodyfat'] = $row->amount; 

的情況下,你不希望看到的警告:

$results = array(); 
foreach($weight_history->result() as $row) { 
    if (!isset($results[date("F j, Y", $row->date)])) $results[date("F j, Y", $row->date)] = array('bodyfat'=>null); 
    $results[date("F j, Y", $row->date)]['weight'] = $row->amount; 
} 
foreach($bodyfat_history->result() as $row) { 
    if (!isset($results[date("F j, Y", $row->date)])) $results[date("F j, Y", $row->date)] = array('weight'=>null); 
    $results[date("F j, Y", $row->date)]['bodyfat'] = $row->amount; 
} 
+0

我想我已經過了複雜的事情,這就是讓我困惑的原因。這工作,謝謝一噸! –