我有一个包含多个对象的数组(比如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);
有人可以帮助我如何获得上面提到的预期结果吗?
答案 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);
答案 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);