PHP mette a disposizione diversi tipi di cicli. Un ciclo è un modo per ripetere le stesse istruzioni finché una data condizione è TRUE
.
Il ciclo while
Il primo tipo, il più semplice, è while
:
while(condizione) { istruzioni }
Questo ciclo esegue le istruzioni finché la condizione principale è TRUE
. Il suo valore viene controllato ad ogni iterazione e, non appena la condizione diventa FALSE
, si esce dal ciclo. Attenzione: se prima di entrare nel ciclo, la condizione è già FALSE
, il ciclo non verrà eseguito affatto.
<?php $i = 1; while ($i <= 10) { //finché $i è minore o uguale a 10 $i++; } ?>
Questo esempio può essere letto così: finché la variabile $i
è minore o uguale a 10, incrementa la variabile $i
. Ad ogni iterazione il valore di $i
, quindi, cambia. Alla prima iterazione vale 1, perché l’abbiamo inizializzata fuori dal ciclo, alla seconda iterazione vale 2, alla terza 3, etc.
<?php $a = true; while ($a == true) { //finché $a è TRUE $b=rand(1,9); if ($b == 5) { $a = false; } } ?>
Questo esempio è un po’ più complesso, vediamo come funziona. Innanzitutto assegniamo TRUE
alla variabile $a
, in modo che la condizione sia vera e possiamo così entrare nel ciclo. Ad ogni iterazione assegniamo un diverso valore a $b
usando la funzione rand()
, alla quale diciamo di restituire un numero casuale nell’intervallo definito, in questo caso un valore tra 1 e 9. Nel caso $b
sia uguale a 5, assegnamo FALSE
ad $a
, ed alla prossima iterazione la condizione sarà FALSE
e usciremo dal ciclo. Ciò significa che questo ciclo non ha una durata predefinita, perché non possiamo sapere dopo quante iterazioni $b
sarà uguale a 5.
Il ciclo do-while
Il ciclo do-while è del tutto simile a quello while, con la sola sostanziale differenza che l’espressione è posta alla fine del ciclo. Questo vuol dire che la prima volta si entra sempre nel ciclo, quindi la prima iterazione è sempre eseguita.
<?php $i = 0; do { echo $i; } while ($i > 0); ?>
In questo esempio, il ciclo viene eseguito una sola volta. La seconda iterazione non ci sarà perché la condizione ($i > 0)
è falsa.
Il ciclo for
Il ciclo for è il più complesso di PHP, perché ha una sintassi particolare:
for (espressione1; espressione2; espressione3) { istruzioni }
L’espressione1
viene eseguita una sola volta, all’inizio del ciclo. L’espressione2
, invece, viene valutata ad ogni iterazione ed il ciclo continua finché è TRUE
. Infine, l’espressione3
viene eseguita alla fine di ogni iterazione. Può sembrare difficile, ma non lo è. Vediamo un esempio:
<?php for ($i = 1; $i <= 10; $i++) { echo $i; } ?>
Leggiamolo così: data $i
uguale 1
, finché $i
è minore o uguale a 10
, incrementa $i
di 1
. Questo ciclo verrà eseguito 10 volte.
Il ciclo foreach
Per iterare attraverso tutti gli elementi contenuti in un array, PHP mette a disposizione il ciclo foreach
.
<?php $citta=array('napoli', 'milano', 'roma', 'torino'); foreach($citta as $chiave => $valore) { echo "Sto visitando la città di $valore"; } ?> Output: Sto visitando la città di napoli Sto visitando la città di milano Sto visitando la città di roma Sto visitando la città di torino
Ad ogni iterazione del ciclo, $chiave
e $valore
conterranno i dati dell’elemento corrente. Sebbene potremmo ottenere lo stesso risultato con un ciclo for
, il ciclo foreach
è più semplice e veloce in quanto scorre tutto l’array, anche se non sappiamo a priori la sua grandezza.
<?php $scarpe = array( 'Nike' => 3, 'Puma' => 10, 'Adidas' => 7, 'Diadora' => 2 ); foreach($scarpe as $marca => $numero_disponibili) { echo "In magazzino abbiamo $numero_disponibili paia di $marca"; } ?> Output: In magazzino abbiamo 3 paia di Nike In magazzino abbiamo 10 paia di Puma In magazzino abbiamo 7 paia di Adidas In magazzino abbiamo 2 paia di Diadora
È possibile usare una forma più breve, che non ci fa accedere alla chiave, ma soltanto al valore.
<?php $a = array(1, 2, 3, 17); foreach($a => $valore) { echo $valore; } ?> Output: 1 2 3 17
Interrompere un ciclo
l’istruzione break
interrompe l’esecuzione di un ciclo for
, foreach
, while
, do-while
e switch
. Quando lo usiamo? Pensiamo ad esempio di voler cercare un elemento all’interno di un array e di uscire dal ciclo appena lo troviamo, senza continuare ad iterare tutti gli elementi.
<?php $citta=array('napoli', 'milano', 'roma', 'torino'); $i=1; foreach($citta => $valore) { if ($valore == 'roma') { break; } $i++; } echo "Ho eseguito il ciclo $i volte"; echo "Questo array ha " . count($citta) . " elementi"; ?> Output: Ho eseguito il ciclo 3 volte Questo array ha 4 elementi