Istruzione continue in PHP
Oltre all'istruzione break, che termina
l'esecuzione di un ciclo, esiste anche l'istruzione
continue, che avvia una nuova iterazione
del ciclo. Questa istruzione a volte può essere
utile per semplificare il codice, sebbene quasi
sempre il problema possa essere risolto anche senza di essa. Diamo
un'occhiata a un esempio pratico.
Supponiamo di avere un array di numeri.
Iteriamolo con un ciclo e eleviamo al quadrato i numeri divisibili
per 2 e li stampiamo
a schermo, mentre i numeri divisibili per 3,
li eleviamo al cubo e li stampiamo a schermo.
Ecco la soluzione al problema descritto:
<?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;
}
}
?>
Come puoi vedere, la riga echo $res
si ripete due volte. Portiamola
fuori dall'if, in questo modo:
<?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; // abbiamo spostato l'output fuori dalla condizione
}
?>
Tuttavia, ora il nostro script funziona in modo leggermente
diverso: succederà che anche per gli elementi ordinari,
non elaborati dal nostro if, verrà
eseguita l'output della variabile $res
a schermo, cosa che in base alle condizioni del nostro problema non
ci serve.
Risolviamo il problema, aggiungendo alla nostra if
un'ulteriore condizione else, che verrà attivata
per gli elementi non divisibili per 2 e
3, e richiamiamo l'istruzione continue,
che ci reindirizzerà immediatamente
alla nuova iterazione 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; // passeremo alla nuova iterazione del ciclo
}
echo $res; // verrà eseguito se divisibile per 2 o 3
}
?>
Scrivi un ciclo che stampi solo
i numeri pari da 1 a 100,
saltando quelli dispari utilizzando continue.