PHP 通过属性名称从包含对象的数组中删除元素

我有这个 json 格式,这是我的最终响应,当我从 API 获取它时,它只有一个属性名称。我使用 json_decoe 得到这个


apiErrors[

    {

        PropertyName: "Name1",

        DisplayName: "Name1",

        Step: "Step1

    },

        PropertyName: "Name2",

        DisplayName: "Name2",

        Step: "Step2

    }

]

我想删除 Step 属性上带有“Step2”的项目。


在 PHP 中,我使用 foreach 进行迭代并添加显示和步骤属性


$apiErrors = json_decode(curl_exec($ch));


foreach ($apiErrors as $value) {

    if ($value->PropertyName == "Name1") {

        $value->DisplayName = 'Name1';

        $value->Step = 'Step1';

    }

    if ($value->PropertyName == "Name2") {

        $value->DisplayName = 'Name2';

        $value->Step = 'Step2';

    }

}

我尝试这样做


if (($key = array_search("Step2", $apiErrors)) !== false) {

    unset($apiErrors[$key]);

}

但它并没有删除任何东西


月关宝盒
浏览 79回答 2
2回答

慕哥6287543

简单的过滤就可以完成这项工作:$apiErrors = array_filter(    $apiErrors,    function ($v) { return 'Step2' !== $v->Step; });

慕田峪7331174

我知道一开始这很令人困惑,但是如果您使用 PHP ,它不会自动更新该值foreach(),因为它会创建自己的局部变量。您需要&在 前面指定自己$value,如下所示:foreach ($apiErrors as &$value) {。这将确保数组中的值实际发生变化。
打开App,查看更多内容
随时随地看视频慕课网APP