Intereting Posts
Использование строкового пути для установки данных вложенных массивов Как получить текущий уровень рекурсии в функции PHP MySQL и NoSQL: помогите выбрать правильный Ограничить выполнение скрипта PHP одним реферированием Как передать массив из контроллера для просмотра (Laravel 5)? Пакетная обработка PHP: отправка флажков и значений радио строк таблицы вместе тест, если ввод формы – это целое число 1 или 2 цифры с jquery и php Браузер показывает PHP-код вместо обработки Разница между mysql & mysqli Woocommerce отключает автоматическое изменение состояния заказа в ожидании-> обработки Можно ли защитить от загрузки видео с сайта? PHP 5.3.5 fileinfo () Тип MIME для файлов MS Office 2007 – обновления magic.mime? Преобразование строки массива PHP в массив Как быстро настроить HTTP-сообщение CSS-спрайты и PHP с использованием динамического выделения меню, не работающего с функцией цикла

вырываться из if и foreach

У меня есть цикл foreach и оператор if. Если совпадение найдено, мне нужно в конечном счете вырваться из foreach.

foreach($equipxml as $equip) { $current_device = $equip->xpath("name"); if ( $current_device[0] == $device ) { // found a match in the file $nodeid = $equip->id; <break out of if and foreach here> } } 

if это не структура цикла, поэтому вы не можете «вырваться из нее».

Вы можете, однако, вырваться из foreach , просто называя break . В вашем примере он имеет желаемый эффект:

 foreach($equipxml as $equip) { $current_device = $equip->xpath("name"); if ( $current_device[0] == $device ) { // found a match in the file $nodeid = $equip->id; // will leave the foreach loop and also the if statement break; } this_command_is_not_executed_after_a_match_is_found(); } 

Просто для полноты для других, которые наткнулись на этот вопрос, ища ответ.

break принимает необязательный аргумент, который определяет, сколько структур цикла он должен сломать. Пример:

 foreach (array('1','2','3') as $a) { echo "$a "; foreach (array('3','2','1') as $b) { echo "$b "; if ($a == $b) { break 2; // this will break both foreach loops } } echo ". "; // never reached } echo "!"; 

Результат:

1 3 2 1!


Если – по какой-то неясной причине – вы хотите break из оператора if (который не является структурой цикла и, следовательно, не разбивается на определение), вы можете просто обернуть ваш if в крошечной структуре цикла, чтобы вы могли выпрыгнуть из этого кода блок.

Обратите внимание, что это общий взлом, и обычно вы не хотите этого делать:

 do if ($foo) { // Do something first... // Shall we continue with this block, or exit now? if ($abort === true) break; // Continue doing something... } while (false); 

Приведенный выше пример взят из комментария в документах PHP

Если вы задаетесь вопросом о синтаксисе: он работает, потому что здесь используется сокращенный синтаксис. Внешние фигурные скобки могут быть опущены, потому что структура цикла содержит только один оператор: if ($foo) { .. } .

Другой пример:
do $i++; while ($i < 100) do $i++; while ($i < 100) эквивалентно do { $i++; } while ($i < 100) do { $i++; } while ($i < 100) .

 foreach($equipxml as $equip) { $current_device = $equip->xpath("name"); if ( $current_device[0] == $device ) { // found a match in the file $nodeid = $equip->id; break; } } 

Просто используйте break . Это сделает это.

Более безопасный способ подхода к взлому foreach или while loop в PHP заключается в том, чтобы вложить переменную счетчика счетчика и, if условие внутри исходного цикла. Это дает вам более жесткий контроль, чем break; что может привести к хаосу в другом месте на сложной странице.

Пример:

 // Setup a counter $ImageCounter = 0; // Increment through repeater fields while ( condition ) $ImageCounter++; // Only print the first while instance if ($ImageCounter == 1) { echo 'It worked just once'; } // Close while statement endwhile;