W3docs

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 a while, 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
}
  1. Inizializzatore viene eseguito una volta, prima dell'avvio del ciclo — di solito per impostare un contatore.
  2. Condizione viene verificata prima di ogni iterazione. Il ciclo esegue finché è true e si ferma nel momento in cui diventa false.
  3. Aggiornamento viene eseguito dopo ogni iterazione — di solito per incrementare il contatore.
php— editable, runs on the server

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.

php— editable, runs on the server

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.

php— editable, runs on the server

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:

php— editable, runs on the server

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:

php— editable, runs on the server

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.

php— editable, runs on the server

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.

php— editable, runs on the server

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?

SituazioneScelta migliore
Conosci il numero di iterazioni o hai bisogno di un contatorefor
Ripeti finché una condizione è vera, numero di iterazioni sconosciutowhile
Come while, ma il corpo deve essere eseguito almeno una voltado...while
Elabora ogni elemento di un arrayforeach

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.

Esercitazione

Pratica
Quali dei seguenti sono tipi di ciclo validi in PHP?
Quali dei seguenti sono tipi di ciclo validi in PHP?
Was this page helpful?