I cicli in PHP: for, while e do

Nei linguaggi di programmazione, i cicli sono istruzioni di codice che eseguono ripetutamente un blocco di dichiarazioni. In parole più semplici, un ciclo è la ripetizione di uno specifico comando per un dato numero di volte.

Il concetto può sembrare ostico, ma con un esempio pratico tutto risulterà più chiaro. Diamo un’occhiata alla sidebar di questo sito, il widget che visualizza gli ultimi articoli del blog. Nel blocco vengono mostrati il titolo e il link che punta all’articolo completo. Il blocco è ripetuto per 5 volte, per 5 articoli differenti. Questo è un ciclo, una struttura identica con dati differenti.

Un ciclo può ripetersi per un numero di volte specificato oppure fino a quando sussiste una determinata condizione.

In questo tutorial impareremo a usare tre cicli di PHP: for, while e do-while. Il ciclo foreach merita una considerazione a parte, potete approfondire il suo funzionamento nella pagina dedicata.

Ciclo for

Questo tipo di ciclo utilizza un contatore per determinare quando deve fermarsi la ripetizione del blocco di dichiarazioni.

La sintassi generica di un ciclo for è la seguente :

for(valore_iniziale; condizione_finale; incremento)
{
 blocco di dichiarazioni;
}

I parametri del ciclo for possono essere valori, variabili o espressioni.

  • Il primo parametro imposta il contatore e il suo valore iniziale. Viene eseguito una sola volta, all’inizio del ciclo
  • Il secondo parametro imposta il valore finale. Viene eseguito per ogni ripetizione del ciclo
  • Il terzo parametro definisce l’incremento del contatore dopo ogni ripetizione del ciclo.

Fino a quando la condizione definita risulterà vera il ciclo sarà ripetuto.

Analizziamo un esempio pratico, impostando un conto alla rovescia da 10 a 0. Dovremmo procedere in questo modo :

for($i=10; $i>0; $i--)
{
 echo $i . "<br/>";
}

In questo esempio, il valore iniziale del contatore è impostato su 10 e ad ogni iterazione decresce di un’unità, fino a quando non sarà maggiore di zero. Quindi si fermerà quando sarà uguale a 1. Perché non impostare la condizione finale su zero? Perché la condizione risulterà falsa per ogni ripetizione (il contatore non è mai uguale a zero) e il ciclo non sarà generato.

Attenzione anche ad uno degli errori più comuni, utilizzare l’operatore di assegnazione invece che l’operatore di uguaglianza.

for($i=10; $i=0; $i--)
{
 echo $i . "<br/>";
}

Quando terminerà questo ciclo? MAI! Al contatore è stato associato un operatore di assegnazione (=) non di uguaglianza (==), quindi la condizione non viene mai calcolata come falsa e il ciclo generato risulterà infinito!

Questa è la sintassi corretta :

for($i=10; $i>=1; $i--)
{
 echo $i . "<br/>";
}

Ciclo while

While è un semplice ciclo che continua a ripetersi fino a quando la condizione definita risulta vera. Torniamo all’esempio degli ultimi articoli visualizzati nella sidebar di questo sito. I dati sono memorizzati nel database che viene interrogato per estrarre gli elementi necessari per visualizzare il blocco. L’esempio di seguito è puramente dimostrativo

$sql = 'SELECT id, titolo, link FROM wp_posts
        ORDER BY id DESC
        LIMIT 5';

Una volta che abbiamo estratto i dati dobbiamo visualizzarli e il ciclo while è un’ottima soluzione. La query è caricata come un array associativa che rappresenterà la condizione del ciclo:

$sth = $db->prepare($sql);
$sth->execute();
// ciclo i dati estratti dal database
while($row = $sth->fetch(PDO::FETCH_ASSOC))
{
 echo '<a href="'.$row['link'].'">'.$row['titolo'].'</a>';
}

Il ciclo continua a ripetersi fino a quando la condizione non è più vera, ossia quando avremo stampato a video 5 risultati, come specificato nel limite della query.

Analizziamo un altro esempio, supponiamo di voler stampare a video la tabellina del 5. Per eseguire questo ciclo abbiamo bisogno di un contatore che incrementi di un’unità per gni ripetizione della sequenza, altrimenti lo script non sarà in grado di stabilire quando la condizione cesserà di essere vera.

Procederemo in questo modo: definiamo in una variabile il moltiplicatore (5), impostiamo un contatore con valore 0 e per ogni ripetizione del ciclo lo incrementiamo di un’unità.

$multiplier = 5;
// questo è il contatore
$i= 0;
// totale
$total = 0;
// ciclo while
while($i <= 10)
{
 $total = $multiplier * $i;
 echo "$multiplier X $i = $total";
 // ad ogni ripetizione il contatore aumenta di un'unità
 $i ++;
}

Il mancato incremento del contatore all’interno del blocco di codice è un errore comune. Se il contatore non aumenta di valore non si arriva alla condizione falsa che ferma la ripetizione del ciclo. Attenzione!

L’istruzione while controlla la veridicità della condizione all’inizio del ciclo, per cui se risulta falsa la sequenza terminerà senza eseguire il blocco delle dichiarazioni.

Ciclo do-while

Al contrario di while, il ciclo do-while controlla la condizione dopo l’esecuzione delle dichiarazioni. Anche se la condizione è falsa il blocco delle dichiarazioni viene eseguito almeno una volta.

La sintassi è la seguente:

// questo è il contatore
$i= 0;
// alcune variabili
$multiplier = 5;
$total = 0;
// ciclo do
do
{
 //istruzioni per il ciclo
 $total = $multiplier * $i;
 echo "$multiplier * $i = $total";
 $i++;
}
//condizione
while($i<=10);

Quando preferire un costrutto do-while? Ad esempio quando non si conoscono le condizioni che determinano il ciclo. Se avessimo impostato un contatore casuale all’interno della prima iterazione,  avremmo dovuto eseguire necessariamente la prima iterazione per valutare la condizione per le ripetizioni successive.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *