【问题标题】:Replace Object inside an Array in php在php中替换数组内的对象
【发布时间】:2013-09-28 08:31:02
【问题描述】:

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

谁能帮助我了解如何获得上述预期结果?

【问题讨论】:

  • 那是 JSON。你以前真的解码过吗?
  • @AmalMurali :不,我刚刚对其进行了格式化,以便每个人都可以看到我想要的结果。实际上它是一个对象数组。

标签: php arrays codeigniter object


【解决方案1】:

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

$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);

【讨论】:

  • 我认为这行不通。你能解释一下array_unique() 将如何只选择带有RecordCount != 0 的对象吗?看到我想要的结果是RecordCount == 0的Object应该替换为RecordCount != 0
  • 似乎每个数组的密钥都是EffectiveStatus。然后你必须使用 foreach();让我相应地更新我的答案。
【解决方案2】:

没有“内置”功能。你将不得不手动循环和比较每个。 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

【讨论】:

  • 演示不再可用。
猜你喜欢
  • 1970-01-01
  • 2018-05-12
  • 2018-04-15
  • 1970-01-01
  • 2014-08-20
  • 2016-10-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-08
相关资源
最近更新 更多