Как я могу изменить свой массив, который напрямую влияет на мой цикл foreach?

Я петлю через массив, который у меня есть, используя цикл foreach. Однако в цикле foreach мне нужно изменить массив, чтобы он напрямую влиял на мой цикл foreach.

Поэтому я приведу пример моей проблемы:

<?php $array = ["Red", "Yellow", "Blue", "Orange"]; foreach($array as $color) { if(($key = array_search("Blue", $array)) !== false) unset($array[$key]); echo $color . "<br>"; } ?> 

вывод:

  красный
 желтый
 синий
 оранжевый

Итак, вы можете видеть, что я unset() элемент массива со значением Blue . Но у меня все еще есть это на выходе.

Теперь мой вопрос: как я могу отключить элемент со значением Blue , так что он напрямую влияет на мой цикл foreach, значит, я больше не увижу его на выходе, так как я удалил его до того, как перейду через этот конкретный элемент.

    Ожидаемый результат будет (Примечание: синий отсутствует в выходе):

     Red Yellow Orange 

    Related of "Как я могу изменить свой массив, который напрямую влияет на мой цикл foreach?"

    Вы можете назначить свой массив ссылкой на другую переменную, так что is_ref равно 1, означает, что цикл foreach больше не is_ref копию вашего массива.

    Поэтому просто поставьте это перед вашей петлей foreach:

     $arr = &$array; 

    Для получения дополнительной информации о том, как на самом деле работает foreach, см.: Как работает PHP foreach?

    Также обратите внимание, поскольку в PHP 7 есть некоторые изменения: http://php.net/manual/en/migration70.incompatible.php#migration70.incompatible.foreach, это больше не будет работать в PHP 7.

    Если вы хотите сделать то же самое в PHP 7, где изменилось поведение, просто скажите, что вы хотите перебирать массив по ссылке, например

     foreach($array as &$color)