Ответ 1
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)
.