W3docs

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 break al di fuori di un ciclo o di un'istruzione switch provoca 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

php— editable, runs on the server

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

php— editable, runs on the server

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

php— editable, runs on the server

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

IstruzioneEffetto
breakInterrompe completamente il ciclo; l'esecuzione riprende dopo il ciclo.
continueSalta il resto dell'iterazione corrente; il ciclo continua.
break NEsce da N cicli annidati contemporaneamente.
continue NSalta alla successiva iterazione del ciclo N livelli più in alto.

Errori comuni

  • continue in un ciclo do...while verifica comunque la condizione. Non salta il controllo della condizione, quindi il ciclo può comunque terminare dopo un continue.
  • continue si comporta diversamente all'interno di switch. All'interno di un switch che si trova dentro un ciclo, continue agisce come break per il switch ed emette un avviso nelle versioni moderne di PHP. Usa break per uscire dal switch, e riserva continue per il ciclo circostante.
  • L'errore di un'unità con continue in un ciclo for è raro perché l'incremento dell'istruzione for viene eseguito normalmente — ma in un ciclo while devi aggiornare il contatore prima di continue, 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 ciclofor, foreach, while e do...while.

Pratica

Pratica
In PHP, qual è la funzione principale delle istruzioni 'break' e 'continue'?
In PHP, qual è la funzione principale delle istruzioni 'break' e 'continue'?
Was this page helpful?