Tecniche di ciclo in PHP: una guida completa
Impara i cicli PHP: for, while, do-while e foreach con esempi eseguibili, break e continue, cicli annidati e consigli su come scegliere il ciclo giusto.
I cicli ti permettono di eseguire lo stesso blocco di codice più e più volte senza doverlo copiare e incollare. Invece di scrivere dieci istruzioni echo, ne scrivi una e dici a PHP di ripeterla dieci volte. Quasi ogni programma reale itera su qualcosa: righe di un database, articoli in un carrello della spesa, righe di un file o numeri in un intervallo.
PHP offre quattro costrutti per i cicli:
for— quando sai quante volte ripetere, oppure hai bisogno di un contatore.while— ripeti finché una condizione rimane vera (potresti non sapere in anticipo quante volte).do...while— uguale awhile, ma il corpo viene eseguito almeno una volta.foreach— il ciclo ideale per scorrere ogni elemento di un array.
Questa pagina descrive la sintassi di ciascuno, come controllare i cicli con break e continue, i cicli annidati e come scegliere quello giusto.
Cicli for
Un ciclo for ripete un blocco un numero noto di volte. Il suo intestazione ha tre parti separate da punti e virgola:
for (initializer; condition; update) {
// body
}- Inizializzatore viene eseguito una volta, prima dell'avvio del ciclo — di solito per impostare un contatore.
- Condizione viene verificata prima di ogni iterazione. Il ciclo esegue finché è
truee si ferma nel momento in cui diventafalse. - Aggiornamento viene eseguito dopo ogni iterazione — di solito per incrementare il contatore.
Qui $i parte da 0, il corpo viene eseguito finché $i < 10, e $i++ aggiunge 1 dopo ogni passaggio. Il ciclo stampa The number is 0 fino a The number is 9 — dieci righe. Nota che si ferma a 9, non a 10, perché la condizione $i < 10 è già falsa quando $i raggiunge 10. Gli operatori relazionali usati qui (<, ++) sono descritti in operatori PHP.
Cicli while
Un ciclo while ripete finché la sua condizione è vera. Usalo quando il numero di iterazioni non è fisso in anticipo — ad esempio, per leggere fino alla fine di un file.
Questo stampa le stesse dieci righe dell'esempio for precedente. La differenza è puramente stilistica: con while gestisci tu stesso il contatore ($i = 0 prima del ciclo, $i++ al suo interno). Dimenticare $i++ farebbe sì che la condizione rimanga sempre vera — un ciclo infinito, il bug più comune nei cicli.
Cicli do-while
Un ciclo do...while è come while, ma verifica la condizione dopo aver eseguito il corpo. Ciò significa che il corpo viene sempre eseguito almeno una volta, anche se la condizione è falsa fin dall'inizio.
Anche questo stampa da 0 a 9. Il comportamento "almeno una volta" è importante quando la condizione dipende da qualcosa prodotto dal corpo del ciclo — ad esempio, quando si chiede un input all'utente e lo si ripete solo se l'input non era valido. Nota il punto e virgola dopo while (...); è obbligatorio in questo caso.
Cicli foreach
Un ciclo foreach scorre ogni elemento di un array, uno alla volta. È il modo più pulito di iterare su una collezione perché non devi mai gestire un indice manualmente.
La forma più semplice ti fornisce ogni valore:
Ad ogni passaggio, $value contiene l'elemento successivo, quindi questo stampa Red, Green e poi Blue.
Per gli array associativi, usa la forma $key => $value per leggere sia la chiave che il valore:
Questo stampa Peter is 32, Quagmire is 30 e Joe is 34. foreach preserva l'ordine di inserimento, quindi gli elementi vengono restituiti nell'ordine in cui li hai definiti.
Controllo del ciclo: break e continue
A volte hai bisogno di fermare un ciclo in anticipo o saltare un singolo passaggio. Questo è il compito di break e continue, e funzionano in tutti i tipi di ciclo.
Istruzione break di PHP
L'istruzione break interrompe immediatamente il ciclo e salta al codice successivo.
Quando $i raggiunge 5, break termina il ciclo, quindi vengono stampati solo Number: 0 fino a Number: 4.
Istruzione continue di PHP
L'istruzione continue salta il resto dell'iterazione corrente e passa direttamente a quella successiva — il ciclo stesso continua.
Qui continue salta l'iterazione in cui $i == 5, quindi viene stampato ogni numero tranne 5: da Number: 0 a Number: 4, poi da Number: 6 a Number: 9.
Cicli annidati
Puoi inserire un ciclo all'interno di un altro. Il ciclo interno viene eseguito completamente a ogni singolo passaggio del ciclo esterno. È così che si costruiscono griglie, tabelle e tavole pitagoriche.
<?php
for ($row = 1; $row <= 3; $row++) {
for ($col = 1; $col <= 3; $col++) {
echo $row * $col . "\t";
}
echo "\n";
}
?>Il ciclo esterno viene eseguito tre volte (una per riga); per ogni riga il ciclo interno viene eseguito tre volte (una per colonna), stampando una griglia di moltiplicazione 3×3. Nota che all'interno di un ciclo annidato, break e continue influiscono solo sul ciclo in cui si trovano. Per uscire da più di un livello alla volta, puoi passare un numero: break 2; esce da due cicli.
Quale ciclo usare?
| Situazione | Scelta migliore |
|---|---|
| Conosci il numero di iterazioni o hai bisogno di un contatore | for |
| Ripeti finché una condizione è vera, numero di iterazioni sconosciuto | while |
Come while, ma il corpo deve essere eseguito almeno una volta | do...while |
| Elabora ogni elemento di un array | foreach |
In caso di dubbio con gli array, scegli foreach — è il più leggibile e il più difficile da sbagliare, poiché non c'è nessun indice da gestire e nessun rischio di andare fuori dai limiti.
Conclusione
I quattro cicli di PHP coprono tutti i pattern di ripetizione che incontrerai: for per i cicli con contatore, while e do...while per i cicli basati su condizioni, e foreach per gli array. Combinali con break e continue per controllare il flusso, e annidali per lavorare con griglie e tabelle. Una volta che i cicli diventano naturali, abbinali alle istruzioni condizionali, all'istruzione switch e alle funzioni per strutturare programmi completi.