break
(PHP 4, PHP 5)
break ends execution of the current for, foreach, while, do-while or switch structure.
break accepts an optional numeric argument which tells it how many nested enclosing structures are to be broken out of.
<?php
$arr = array('one', 'two', 'three', 'four', 'stop', 'five');
while (list(, $val) = each($arr)) {
if ($val == 'stop') {
break; /* You could also write 'break 1;' here. */
}
echo "$val<br />\n";
}
/* Using the optional argument. */
$i = 0;
while (++$i) {
switch ($i) {
case 5:
echo "At 5<br />\n";
break 1; /* Exit only the switch. */
case 10:
echo "At 10; quitting<br />\n";
break 2; /* Exit the switch and the while. */
default:
break;
}
}
?>
Version | Description |
---|---|
5.4.0 | break 0; is no longer valid. In previous versions it was interpreted the same as break 1;. |
5.4.0 | Removed the ability to pass in variables (e.g., $num = 2; break $num;) as the numerical argument. |
Коментарии
You can also use break with parentheses: break(1);
Note:
Using more nesting level leads to fatal error:
<?php
while (true) {
foreach ([1, 2, 3] as $value) {
echo 'ok<br>';
break 3; // Fatal error: Cannot 'break' 3 levels
}
echo 'jamais exécuter';
break;
}
?>
@ei dot dwaps at gmail dot com
To break more than 2 levels you must have more than 2 structure.
In your example you have 2 structures : while and foreach and you try to break three.
Test with 3 structures and it works ;), example with adding for loop :
<?php
for ($i = 0; $i > 5; ++$i) {
while (true) {
foreach ([1, 2, 3] as $value) {
echo 'ok<br>';
break 3; // Fatal error: Cannot 'break' 3 levels
}
echo 'jamais exécuter';
break;
}
}