我有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
我想要绘制这些数据的图形,因此我需要合并匹配的日期,然后在剩下的值中将它们归零。
我未能掌握的逻辑是如何添加其他逻辑以获得完整的数据集。
这是我的代码,用于合并数据并获取剩余的权重结果。什么是添加不匹配的bodyfat结果的最佳方式。如果我在嵌套循环中执行它们,数据将被多次添加。
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 - Null
答案 0 :(得分: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;
}