У меня есть цикл 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;