在php中替换Array中的Object

时间:2013-09-23 12:34:11

标签: php arrays codeigniter object

我有一个包含多个对象的数组(比如3个对象),每个对象都有3个“键值”对。

$PredefinedResult是这样的:

[
    {
        "EffectiveStatusId":0,
        "EffectiveStatus":"abc",
        "RecordCount":0
    },
    {
        "EffectiveStatusId":0,
        "EffectiveStatus":"def",
        "RecordCount":0
    },
    {
        "EffectiveStatusId":0,
        "EffectiveStatus":"ghi",
        "RecordCount":0
    }
]

我有另一个名为$MainResult的对象数组,其值为:

[
    {
        "EffectiveStatusId":1,
        "EffectiveStatus":"abc",
        "RecordCount":7
    },
    {
        "EffectiveStatusId":6,
        "EffectiveStatus":"def",
        "RecordCount":91
    }
]

预期结果:

我想用$PredefinedResult中的对象替换$MainResult内的类似对象,并希望得到如下结果:

[
    {
        "EffectiveStatusId":1,
        "EffectiveStatus":"abc",
        "RecordCount":7
    },
    {
        "EffectiveStatusId":6,
        "EffectiveStatus":"def",
        "RecordCount":91
    },
    {
         "EffectiveStatusId":0,
         "EffectiveStatus":"ghi",
         "RecordCount":0
    }
]

我尝试了什么:

我尝试使用此代码,但它没有给我所需的结果。

$FinalResult = array_replace($PredefineResult,$MainResult);

有人可以帮助我如何获得上面提到的预期结果吗?

2 个答案:

答案 0 :(得分:3)

这没有“内置”功能。你必须手动循环并比较每个。 array_map似乎是一个不错的选择:

$PredefinedResult = array_map(function($a) use($MainResult){
    foreach($MainResult as $data){
        if($a->EffectiveStatus === $data->EffectiveStatus){
            return $data;
        }
    }
    return $a;
}, $PredefinedResult);

DEMO:http://codepad.viper-7.com/OHBQK8

答案 1 :(得分:2)

遍历数组并手动比较值如下。

$res = array();
foreach ($PredefineResult as $result){
    foreach ($MainResult as $mresult){
        if(($result->EffectiveStatus == $mresult->EffectiveStatus) && $mresult->RecordCount!=0){
            $res[] = $mresult;
        }else $res[] = $result;
    }
}
print_r($res);