在php中替换Array中的Object

Jig*_*Raj 7 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
    }
]
Run Code Online (Sandbox Code Playgroud)

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

[
    {
        "EffectiveStatusId":1,
        "EffectiveStatus":"abc",
        "RecordCount":7
    },
    {
        "EffectiveStatusId":6,
        "EffectiveStatus":"def",
        "RecordCount":91
    }
]
Run Code Online (Sandbox Code Playgroud)

预期结果 :

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

[
    {
        "EffectiveStatusId":1,
        "EffectiveStatus":"abc",
        "RecordCount":7
    },
    {
        "EffectiveStatusId":6,
        "EffectiveStatus":"def",
        "RecordCount":91
    },
    {
         "EffectiveStatusId":0,
         "EffectiveStatus":"ghi",
         "RecordCount":0
    }
]
Run Code Online (Sandbox Code Playgroud)

我尝试了什么:

我试过这个代码,但它没有给我想要的结果.

$FinalResult = array_replace($PredefineResult,$MainResult);
Run Code Online (Sandbox Code Playgroud)

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

Roc*_*mat 3

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

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

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