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