Molto spesso, quando scriviamo del codice, vogliamo poter eseguire uno stesso blocco di codice un certo numero di volte. In questi casi si possono utilizzare le istruzioni di loop (ciclo).
In PHP abbiamo le seguenti quattro istruzioni di ciclo:
- for
- foreach
- while
- do...while
Ciclo for
Possiamo usare l'istruzione for per eseguire un blocco di codice, quando sappiamo a priori quante volte dovrà essere ripetuto.
Sintassi
for (inizializzazione; condizione; incremento)
{
//codice da eseguire;
}
Per utilizzare un ciclo for dobbiamo:
- Inizializzare la variabile contatore.
- Controllare la condizione di terminazione.
- Eseguire il codice del ciclo.
- Incrementare il contatore.
Esempio
<?php
echo "<table border=\"1\">";
echo "<tr><th>Riga</th></tr>";
for ( $i = 1; $i <= 10; $i++)
{
echo "<tr><td>";
echo $i;
echo "</td></tr>";
}
echo "</table>";
?>
Possiamo anche annidare i cicli for
<?php
echo "<table border=\"1\" cellpadding=\"6\">";
echo "<tr><th>*</th>";
for ( $i = 1; $i <= 10; $i++)
{
echo "<th>" . $i . "</th>";
}
echo "</tr>";
for ( $i = 1; $i <= 10; $i++)
{
echo "<tr><td><b>" . $i . "</b></td>";
for ( $j = 1; $j <= 10; $j++)
{
echo "<td>";
echo $i * $j;
echo "</td>";
}
echo "</tr>";
}
echo "</table>";
?>
l'esempio costruisce la classica “tabellina” delle moltiplicazioni.
Condizione ed incremento possono anche essere omesse. Se viene omessa condizione, vuol dire che il ciclo sarà ripetuto all'infinito (a meno che non lo si termini con un istruzione break che vedremo in seguito).
Esempio
for ($i=1;;$i++)
{
if ($i > 10)
{
break;
}
echo $i;
}
Ciclo foreach
Permettono di ciclare su un array in modo abbastanza comodo.
Sintassi
Abbiamo due modi per eseguire il ciclo
foreach($array as $valore)
{
//istruzioni;
}
foreach($array as $chiave => $valore)
{
//istruzioni;
}
Il primo tipo di foreach, scorre l'array $array utilizzando un puntatore alla posizione corrente, ad ogni iterazione viene assegnato il valore dell'elemento corrente a $valore
Esempio
$myArray = array (1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
foreach($myArray as $valore)
{
echo $valore . "<br>";
}
Il secondo tipo di foreach, invece assegna il valore dell'indice alla variabile $chiave
Esempio
$myArray = array (
"uno" => 1,
"due" => 2,
"tre" => 3,
"quattro" => 4,
"cinque" => 5,
"sei" => 6,
"sette" => 7,
"otto" => 8,
"nove" => 9,
"dieci" => 10,
);
foreach($myArray as $chiave => $valore)
{
echo $myArray[$chiave] => $valore . “<br>";
}
Nota: foreach non lavora sull'array originale, ma ne fa una copia, se vogliamo manipolare l'arrai originale dobbiamo usare each().
Ciclo while
Il ciclo while, esegue le istruzioni al suo interno fintanto che la condizione contenuta nella clausola while è vera. La condizione viene verificata all'inizio del ciclo, ne consegue che se questa dovesse risultare false già dalla prima iterazione, il codice al suo interno non verrebbe mai eseguito.
Sintassi
while (condizione)
{
//istruzioni;
}
Esempi
<?php
$i=1;
while($i<=10)
{
echo "Numero " . $i . "<br>";
$i++;
}
?>
<?php
$i=11;
while($i<=10)
{
echo "Numero " . $i . "<br>";
$i++;
}
?>
In questo caso, il blocco di codice all'interno del ciclo non viene mai eseguito.
Ciclo do...while
E' molto simile al ciclo while, con la differenza (sottile, ma importante) che la condizione di uscita viene valutata alla fine del ciclo. Ne consegue che il blocco di codice all'interno di un ciclo do..while verraà eseguito almeno una volta.
Sintassi
do
{
//codice;
} while (condizione);
Esempio
<?php
$i=1;
do
{
echo "Numero " . $i . "<br>";
$i++;
} while ($i<10);
?>
Esempio
<?php
$i=100;
do
{
echo "Numero " . $i . "<br>";
$i++;
} while ($i<10);
?>
In questo caso, anche se la condizione è subito falsa, il codice viene eseguito una volta.
break
break termina immediatamente l'esecuzione di una struttura iterativa.
Se utilizzato in cicli annidati, è possibile passargli un argomento che indica il livello di annodamento del ciclo da interrompere
$i = 0;
while ($i<10)
{
if ($i==5)
break;
echo $i . “<br>”;
}
In questo caso l'esecuzione si interrompe al break e vengono stampati i valori solo fino al 4
continue
continue termina l'esecuzione dell'iterazione corrente di un ciclo e passa a quella successiva
$i = 0;
while ($i<10)
{
if ($i==5)
continue;
echo $i . “<br>”;
}
In questo caso non viene stampato il valore 5