【问题标题】:Merge 2 arrays/objects where dates match and insert non matching as well合并日期匹配的 2 个数组/对象并插入不匹配的对象
【发布时间】:2016-03-04 20:50:30
【问题描述】:

我有 2 个数据库对象,它们随着时间的推移为我提供数据。然而,结果不一定具有相同的日期。用户可以在一天只输入他们的体重,或者在另一天输入体脂,或者在同一天输入两者。

体重历史
日期 - 金额
2016 年 3 月 2 日,星期三 - 194.00
2016 年 3 月 3 日星期三 - 205.40

体脂历史
日期 - 金额
2016 年 3 月 1 日星期三 - 24.80
2016 年 3 月 2 日星期三 - 22.80

我想绘制此数据的图表,因此我需要合并匹配的日期,然后在不匹配的剩余值中包含一个空值。

我未能掌握的逻辑是如何添加其他逻辑以获得完整的数据集。

这是我的代码,用于合并数据并获取剩余的重量结果。什么是添加不匹配的体脂结果的最佳方法。如果我在嵌套循环中执行它们,数据将被添加多次。

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

【问题讨论】:

    标签: php arrays multidimensional-array


    【解决方案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;
    }
    

    【讨论】:

    • 我想我把事情复杂化了,这让我很困惑。成功了,非常感谢!
    猜你喜欢
    • 2018-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-24
    • 2022-11-28
    • 1970-01-01
    • 2019-11-13
    • 2021-09-03
    相关资源
    最近更新 更多