Instrucción continue en PHP
Además de la instrucción break, que termina
el trabajo del ciclo, también existe la instrucción
continue, que inicia una nueva iteración
del ciclo. Esta instrucción a veces puede ser
útil para simplificar el código, aunque prácticamente
siempre la tarea se puede resolver sin ella. Veamos
un ejemplo práctico.
Supongamos que tenemos un array con números. Vamos a
recorrerlo con un ciclo y los números que son divisibles
por 2, los elevaremos al cuadrado y los mostraremos
en pantalla, y los números que son divisibles por 3,
los elevaremos al cubo y los mostraremos en pantalla.
Aquí está la solución de la tarea descrita:
<?php
$arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
foreach ($arr as $elem) {
if ($elem % 2 === 0) {
$res = $elem * $elem;
echo $res;
} elseif ($elem % 3 === 0) {
$res = $elem * $elem * $elem;
echo $res;
}
}
?>
Como puedes ver, la línea echo $res
se repite dos veces. Saquémosla
fuera del if, así:
<?php
$arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
foreach ($arr as $elem) {
if ($elem % 2 === 0) {
$res = $elem * $elem;
} elseif ($elem % 3 === 0) {
$res = $elem * $elem * $elem;
}
echo $res; // sacamos la salida fuera de la condición
}
?>
Ahora bien, nuestro script funciona un poco
diferente: resultará que para los elementos ordinarios,
no procesados por nuestro if, también se
ejecutará la salida de la variable $res
en pantalla, lo cual según las condiciones de nuestra tarea no
necesitamos.
Corrijamos el problema, añadiendo a nuestro if
otra condición else, que se activará
para los elementos no divisibles por 2 y
3, y llamaremos allí a la instrucción continue,
que inmediatamente nos llevará
a la nueva iteración del ciclo:
<?php
$arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
foreach ($arr as $elem) {
if ($elem % 2 === 0) {
$res = $elem * $elem;
} elseif ($elem % 3 === 0) {
$res = $elem * $elem * $elem;
} else {
continue; // pasaremos a una nueva iteración del ciclo
}
echo $res; // se ejecutará si es divisible por 2 o 3
}
?>
Escriba un ciclo que muestre solo
números pares del 1 al 100,
omitiendo los impares usando continue.