2016-03-04 173 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

我想我已经过了复杂的事情,这就是让我困惑的原因。这工作,谢谢一吨! –