Il ciclo for,sebbene potente e versatile, può risultare piuttosto limitativo nel caso si volesse lavorare con array. In questi casi risulta più utile l'uso del ciclo foreach.
Il ciclo foreach ha una sintassi del tipo:
foreach ($array as $valore_elemento)
{
// istruzioni da iterare
}
Le istruzioni raggruppate nelle parentesi graffe si ripetono tante volte quanti sono gli elementi presenti nell'array $array. Ad ogni ripetizione verrà letto un valore presente in tale array e copiato nella variabile $valore_elemento. Per chiarirvi le idee:
<?php
$colori = array('bianco','rosso','verde','blu','giallo','nero');
foreach ($colori as $colore) {
echo $colore , '<br>';
}
?>
Ad ogni iterazione la variabile $colore prenderà il valore di un elemento presente nell'array $colori.
Vediamo ora cosa succede se usiamo il ciclo foreach per effettuare una modifica dei valori contenuti nell'array.
<?php $colori = array('bianco','rosso','verde','blu','giallo','nero');
foreach ($colori as $colore) {
$colore = strtoupper($colore); }
foreach ($colori as $colore) {
echo $colore , '<br>';
}
?>
Abbiamo attraversato 2 volte l'array $colori. La prima volta abbiamo modificato ogni suo elemento per trasformare tutte le lettere in maiuscolo (strtoupper). La seconda volta ci mostra il contenuto che...risulta inalterato! Perché?
Semplice! La variabile $colore contiene esclusivamente la copia di un valore dell'array $colori quindi non è direttamente collegato ad esso. Pertanto, modificando la variabile $colore, non si hanno ripercussioni sul valore dell'array $colori.
Con l'introduzione del PHP 5 però le cose sono cambiate.
Basta infatti inserire il simbolo & prima della variabile $colore perchè le modifiche effettuate su di essa siano riflesse sul relativo valore dell'array.
Nell'esempio seguente, le modifiche ai valori dell'array avranno effetto.
<?php $colori = array('bianco','rosso','verde','blu','giallo','nero');
foreach ($colori as &$colore) {
$colore = strtoupper($colore); }
unset($colore);
foreach ($colori as $colore) {
echo $colore , '<br>';
} ?>
Attenzione: l'utilizzo di & fa si che, terminato il primo ciclo del foreach, $colore diventi l'utlimo elemento dell'array (e non solo una copia). Per questa dobbiamo procedere con l'eliminazione della variabile $colore con l'istruzione unset() prima di poter riutilizzarla poi nel secondo ciclo. Se cosí non fosse, il secondo foreach sovrascriverebbe ad ogni iterazione l'utlimo elemento di $colori con ciascuno degli altri elementi dello stesso array.
Per concludere, vi mostreremo un'ultima variante del ciclo foreach che vi permetterà di scorrere un array e recuperarne gli elementi sotto forma di coppie chiave => valore:
foreach ($array_da_attraversare as $chiave_elemento => $valore_elemento) {
// istruzioni da iterare
}
Funziona piú o meno come la funzione vista in precedenza, solo che ora le chiavi di ciascun elemento sono lette e copiate nella variabile $chiave_elemento.
<?php $film = array('titolo' => 'Via col Vento', 'anno' => 1939,'regista' => 'Victor Fleming');
foreach ($film as $info => $valore) {
echo "$info: $valore <br>\n";
} ?>
Anche utilizzando questa sintassi è possibile ricorrere al carattere & per far si che la variabile $valore sia legata direttamente al corrispondente valore dell'array in modo da modificarlo.