Cicli PHP con l'istruzione Break
In PHP, scorrere array o ripetere un blocco di codice è comune. L'istruzione break permette di uscire da un ciclo in modo efficiente.
Quando scrivi un ciclo in PHP, spesso hai bisogno di un controllo più preciso rispetto a "esegui ogni iterazione". Due istruzioni ti danno questo controllo: break esce dal ciclo anticipatamente, mentre continue salta il resto dell'iterazione corrente. Questa pagina tratta entrambe, incluso come applicarle ai cicli annidati con break N e continue N.
Comprendere l'istruzione Break
L'istruzione break termina immediatamente il ciclo corrente (o il switch) e trasferisce il controllo alla prima istruzione dopo il ciclo. Usala quando hai trovato ciò che stavi cercando, o quando continuare sarebbe inutile o non sicuro — ad esempio, dopo aver trovato un record corrispondente o aver incontrato una condizione di errore.
break funziona all'interno dei cicli for, foreach, while e do...while, nonché all'interno di un'istruzione switch.
Nota: Usare
breakal di fuori di un ciclo o di un'istruzioneswitchprovoca un errore fatale in PHP.
Usare l'istruzione Break in un ciclo For
In un ciclo for, l'istruzione break può essere usata per interrompere il ciclo quando viene soddisfatta una condizione specifica. Ad esempio, il seguente codice usa un ciclo for per cercare un numero in un array:
Esempio PHP di break in un ciclo for
In questo codice, il ciclo si interrompe non appena il valore di $numbers[$i] è uguale a 3. L'output di questo codice sarà "Found 3 at index 2".
Usare l'istruzione Break in un ciclo Foreach
In un ciclo foreach, l'istruzione break funziona in modo simile al ciclo for. Il seguente codice usa un ciclo foreach per cercare un valore specifico in un array associativo:
Esempio PHP di break in un ciclo foreach
In questo codice, il ciclo si interrompe non appena la chiave $color è uguale a "green". L'output di questo codice sarà "green has hex code #00FF00".
Uscire da cicli annidati
L'istruzione break può essere usata anche per uscire da cicli annidati. Quando si usa un'istruzione break all'interno di un ciclo annidato, viene terminato solo il ciclo più interno.
Ad esempio, il seguente codice usa due cicli annidati per cercare un valore specifico in un array bidimensionale:
Esempio PHP di break in cicli annidati
In questo codice, l'istruzione break 2 viene usata per uscire da due livelli di annidamento. L'output di questo codice sarà Found 5 at [1][1].
Il numero dopo break indica quanti cicli contenitore abbandonare, non un indice di ciclo. break 1 equivale a un semplice break, e il numero non può essere maggiore della profondità di annidamento effettiva.
Comprendere l'istruzione Continue
Mentre break esce completamente dal ciclo, continue salta solo il resto dell'iterazione corrente e passa direttamente alla successiva. Il ciclo stesso continua a essere eseguito. Questa è la scelta naturale quando vuoi ignorare alcuni elementi ma continuare a elaborare tutto il resto.
Il seguente ciclo stampa tutti i numeri da 1 a 10 tranne quelli pari:
Esempio PHP di continue in un ciclo for
<?php
for ($i = 1; $i <= 10; $i++) {
if ($i % 2 == 0) {
continue; // skip even numbers
}
echo "$i ";
}
?>L'output è 1 3 5 7 9 — quando $i è pari, continue salta l'echo e il ciclo passa al valore successivo.
Continue in un ciclo Foreach
continue è particolarmente utile in un ciclo foreach quando vuoi filtrare gli elementi durante lo scorrimento. Qui saltiamo i prodotti esauriti:
Esempio PHP di continue in un ciclo foreach
<?php
$products = array(
array("name" => "Pen", "stock" => 12),
array("name" => "Notebook", "stock" => 0),
array("name" => "Eraser", "stock" => 5),
);
foreach ($products as $product) {
if ($product["stock"] === 0) {
continue; // don't list sold-out items
}
echo $product["name"] . " (" . $product["stock"] . " in stock)\n";
}
?>Questo stampa Pen e Eraser, saltando il Notebook esaurito.
Saltare più livelli con continue N
Proprio come break N, continue N salta alla successiva iterazione di un ciclo esterno. continue 2, ad esempio, riavvia il ciclo un livello più in alto:
Esempio PHP di continue 2 in cicli annidati
<?php
for ($i = 1; $i <= 3; $i++) {
for ($j = 1; $j <= 3; $j++) {
if ($j == 2) {
continue 2; // jump to the next $i
}
echo "i=$i j=$j\n";
}
}
?>Il ciclo interno stampa solo j=1, perché raggiungere j == 2 riavvia il ciclo esterno. L'output è i=1 j=1, i=2 j=1, i=3 j=1.
Break vs. Continue
| Istruzione | Effetto |
|---|---|
break | Interrompe completamente il ciclo; l'esecuzione riprende dopo il ciclo. |
continue | Salta il resto dell'iterazione corrente; il ciclo continua. |
break N | Esce da N cicli annidati contemporaneamente. |
continue N | Salta alla successiva iterazione del ciclo N livelli più in alto. |
Errori comuni
continuein un ciclodo...whileverifica comunque la condizione. Non salta il controllo della condizione, quindi il ciclo può comunque terminare dopo uncontinue.continuesi comporta diversamente all'interno diswitch. All'interno di unswitchche si trova dentro un ciclo,continueagisce comebreakper ilswitched emette un avviso nelle versioni moderne di PHP. Usabreakper uscire dalswitch, e riservacontinueper il ciclo circostante.- L'errore di un'unità con
continuein un cicloforè raro perché l'incremento dell'istruzioneforviene eseguito normalmente — ma in un ciclowhiledevi aggiornare il contatore prima dicontinue, altrimenti puoi creare un ciclo infinito.
Conclusione
Le istruzioni break e continue ti danno un controllo preciso sull'esecuzione dei cicli: break esce anticipatamente da un ciclo, mentre continue salta un'iterazione e prosegue. Le forme break N e continue N estendono questo controllo ai cicli annidati. Successivamente, esamina come funzionano i diversi tipi di ciclo — for, foreach, while e do...while.