Imparando I Cicli in Php#3: Il Ciclo Foreach

by admin admin Date: 19-02-2017


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.

 
by admin admin Date: 19-02-2017 visite : 2053