У меня есть массив, который при распечатке выглядит примерно так, как показано ниже, хотя доступны десятки предупреждений и сообщений об успехе:

Array
(
    [warning] => Array
        (
            [0] => We might have a problem.
            [1] => You might have a problem.
            [2] => They may have a problem.
        )

    [success] => Array
        (
            [0] => Everything is awesome
        )

)

Мне нужно посмотреть в массив и найти предупреждение со строковым значением You might have a problem.. Итак, у меня есть следующий код:

foreach($msgArray as $msgType => $messages) {
    foreach($messages as $message => $msg) {
        if($message == 'warning' && $msg == 'You might have a problem.'){
            unset($msgArray[$msgType]);
        }
    }
}

Но, к сожалению, это удаляет все $ msgType из warning из $msgArray.

Как я могу удалить просто предупреждение со значением «Возможно, у вас проблема.»?

Спасибо!

-1
Kaleb Thompson 12 Фев 2020 в 23:18

2 ответа

Лучший ответ

Вы удаляете ключ верхнего уровня. Просто удалите второй уровень вместо этого:

unset($msgArray[$msgType][$message]);

Постскриптум Учитывая данные и код, который вы показали, $message никогда не будет warning. $msgType будет.

1
Greg Schmidt 12 Фев 2020 в 20:21

Одна строка сделает это без циклов и сравнений. Просто найдите сообщение, чтобы вернуть ключ, и unset:

unset($msgArray['warning'][array_search('You might have a problem.', $msgArray['warning'])]);
0
marc_s 15 Фев 2020 в 09:34