PHP удалить элемент из массива с объектами по имени свойства - PullRequest
0 голосов
/ 06 августа 2020

У меня есть этот json Формат, который является моим окончательным ответом, когда я получаю его из API, у него есть только имя свойства. Я получаю это с помощью json_decoe

apiErrors[
    {
        PropertyName: "Name1",
        DisplayName: "Name1",
        Step: "Step1
    },
        PropertyName: "Name2",
        DisplayName: "Name2",
        Step: "Step2
    }
]

Я хочу удалить элементы с «Step2» в свойстве Step.

in PHP Я выполняю итерацию с помощью foreach и добавляю отображение и шаг properties

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

но ничего не удаляет

Ответы [ 2 ]

1 голос
/ 06 августа 2020

Простая фильтрация сделает работу:

$apiErrors = array_filter(
    $apiErrors,
    function ($v) { return 'Step2' !== $v->Step; }
);
0 голосов
/ 06 августа 2020

Я знаю, что сначала это сбивает с толку, но PHP не обновляет значение автоматически, если вы используете foreach(), потому что он создает свои собственные локальные переменные. Вам нужно указать себя с & перед $value, например: foreach ($apiErrors as &$value) {. Это гарантирует, что значение в массиве действительно изменится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...