7

我有一个数组有多个对象(比如 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);

任何人都可以帮助我了解如何获得上述预期结果吗?

4

2 回答 2

3

没有“内置”功能。你将不得不手动循环和比较每个。 array_map在这里似乎是一个不错的选择:

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

演示:http ://codepad.viper-7.com/OHBQK8

于 2013-09-23T14:54:51.363 回答
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);
于 2013-09-23T12:42:52.427 回答