вырваться из 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>
}
}
4 answers
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)
.
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
в 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;
Для тех из вас, кто приземляется здесь, но ищет, как выйти из цикла, содержащего оператор include, используйте return вместо break или continue.
<?php
for ($i=0; $i < 100; $i++) {
if (i%2 == 0) {
include(do_this_for_even.php);
}
else {
include(do_this_for_odd.php);
}
}
?>
Если вы хотите сломаться, находясь внутри do_this_for_even.php вам нужно использовать return. Использование break или continue вернет эту ошибку: Невозможно прервать/продолжить 1 уровень. Я нашел более подробную информацию здесь