Imparando i cicli in PHP#3: il ciclo FOREACH

Imparando i cicli in PHP#3: il ciclo FOREACH

 
 

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.

 
 


Questo sito fa uso di cookie, anche di terze parti, per migliorare la tua esperienza di navigazione. Accettando questa informativa dai il consenso al loro utilizzo. È possibile modificare le impostazioni dei cookie o ottenere ulteriori informazioni qui: Politica dei cookies.