What is meant by a number after "break" or "continue" in PHP?
Could someone please explain, with examples, what is meant by loop break 2
or continue 2
in PHP? What does it mean when break
or continue
is followed by a number?
Solution 1:
$array = array(1,2,3);
foreach ($array as $item){
if ($item == 2) {
break;
}
echo $item;
}
outputs "1" because the loop was broken forever, before echo was able to print "2".
$array = array(1,2,3);
foreach ($array as $item){
if ($item == 2) {
continue;
}
echo $item;
}
outputs 13
because the second iteration was passed
$numbers = array(1,2,3);
$letters = array("A","B","C");
foreach ($numbers as $num){
foreach ($letters as $char){
if ($char == "C") {
break 2; // if this was break, o/p will be AB1AB2AB3
}
echo $char;
}
echo $num;
}
outputs AB
because of break 2
, which means that both statements was broken quite early. If this was just break
, the output would have been AB1AB2AB3
.
$numbers = array(1,2,3);
$letters = array("A","B","C");
foreach ($numbers as $num){
foreach ($letters as $char){
if ($char == "C") {
continue 2;
}
echo $char;
}
echo $num;
}
will output ABABAB
, because of continue 2
: the outer loop will be passed every time.
In other words, continue
stops the current iteration execution but lets another to run, while break
stops the whole statement completely.
So we can ell that continue
is applicable for the loops only, whereas break
can be used in other statements, such as switch
.
A number represents the number of nested statements affected.
if there are 2 nested loops, break
in the inner one will break inner one (however it makes very little sense as the inner loop will be launched again in the next iteration of the outer loop). break 2
in the inner loop will break both.
Solution 2:
The number just says "how many scopes to jump out of"
<?php
for($i = 0; $i < 10; ++$i) {
for($j = 0; $j < 10; ++$j) {
break 2;
}
}
$i and $j will be 0
To quote the manual:
continue accepts an optional numeric argument which tells it how many levels of enclosing loops it should skip to the end of.
same goes for break.