This is likely very trivial but I haven't been able to figure it out.
This works:
function MyFunction(){
//Do stuff
}
foreach($x as $y){
MyFunction();
if($foo === 'bar'){continue;}
//Do stuff
echo $output . '<br>';
}
But this doesn't:
function MyFunction(){
//Do stuff
if($foo === 'bar'){continue;}
}
foreach($x as $y){
MyFunction();
//Do stuff
echo $output . '<br>';
}
That yields only 1 $output and then:
Fatal error: Cannot break/continue 1 level
Any idea what I'm doing wrong?
You can't break/continue a loop outside a function, from within a function. However, you can break/continue your loop based on the return value of your function:
function myFunction(){
//Do stuff
return $foo === 'bar';
}
foreach($x as $y) {
if(myFunction()) {
continue;
}
//Do stuff
echo $output . '<br>';
}
The continue
statement is valid inside looping structures only.
continue
can only skip iterations inside of a looping structure.
Inside of your function, the context of it being ran inside a loop is lost.
The function is compiled separately and could be called from anywhere. Thus, the use of continue
makes no sense here as the context is not in that of a loop. If you wish to delegate work to a function here, you should design the function to return some indication of whether to continue
or not, such as a TRUE
or FALSE
return value.