Я петлю через массив, который у меня есть, используя цикл 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
Вы можете назначить свой массив ссылкой на другую переменную, так что 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)