我有一个数组包含多个对象(例如 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
}
]
预期成果 :
我想用 $MainResult
中的对象替换 $PredefinedResult
中的类似对象,并希望得到这样的结果:
[
{
"EffectiveStatusId":1,
"EffectiveStatus":"abc",
"RecordCount":7
},
{
"EffectiveStatusId":6,
"EffectiveStatus":"def",
"RecordCount":91
},
{
"EffectiveStatusId":0,
"EffectiveStatus":"ghi",
"RecordCount":0
}
]
我试过什么:
我尝试使用此代码,但它没有给我想要的结果。
$FinalResult = array_replace($PredefineResult,$MainResult);
谁能帮助我如何获得上述预期结果?
没有"内置"函数。 您将不得不手动循环和比较每个。 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
遍历数组并手动比较值,如下所示。
$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);