Il ciclo Foreach

Gli argomenti di questa pagina

  • Struttura di controllo foreach
  • Lettura dei soli valori
  • Lettura delle chiavi e dei valori
  • Cicli nidificati
  • Funzioni array_keys(), array_values()

Struttura di controllo foreach

La struttura di controllo foreach utilizza gli array per condizionare le iterazioni e fornisce un modo semplice per scorrere gli array. foreach funziona solo su array ed oggetti, ed emetterà un errore quando si tenta di utilizzarlo su una variabile con un tipo diverso di dati o una variabile non inizializzata. Il ciclo foreach esegue un ciclo su valori contenuti in un array senza valutare alcuna condizione sia vera o falsa. Semplicemente inizia dal primo elemento e termina con l'ultimo elemento della matrice.
Ci sono due sintassi:

foreach (array_expression as $value) {
....statement
}
oppure
foreach (array_expression as $key => $value) {
....statement
}
  • La prima forma cicla su un array dato da array_expression. Ad ogni iterazione, il valore dell'elemento corrente viene assegnato a $value e il puntatore interno avanza di una posizione (così via l'iterazione successiva, punterà all'elemento successivo).
  • La seconda forma, ad ogni iterazione, oltre ad assegnare a $value il valore dell'elemento corrente, assegnerà anche il valore dell'indice corrente alla variabile $key.

Contrariamente al ciclo for questo tipo di ciclo si mostra molto più potente con le matrici o array associativi. Infatti, se con la prima forma qui sopra mostrata si limita a leggere i valori man mano che scorre i vari elementi della matrice, come succederebbe col semplice costrutto for, con la seconda forma è in grado di leggere le coppie chiave => valore. Inoltre, come si vedrà più avanti, in questa pagina, conoscendo una chiave si può leggere il corrispondente valore.

Ma andiamo subito a vedere alcuni esempi pratici.

Lettura dei soli valori

La sintassi è: foreach ($elements as $value)
In questo modo verranno letti i soli valori memorizzati nella matrice

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$elements 
= array(
    
'Casa' => 'Mattoni'
    
'Finestra' => 'Legno'
    
'Sacco' => 'Plastica'
    
'Coperta' => 'Lana'
    
'Scarpe' => 'Pelle'
); 
echo 
"<span class=\"brown\">lettura dei soli valori</span><br />\n";
foreach (
$elements as $value) {
    echo 
$value "<br />\n";
}
?>

 

lettura dei soli valori
Mattoni
Legno
Plastica
Lana
Pelle

 

Lettura delle chiavi e dei valori

La sintassi è: foreach ($elements as $key => $value)
In questo modo vengono letti i valori memorizzati nella matrice e le chiavi a cui questi sono associati

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$elements 
= array(
    
'Casa' => 'Mattoni'
    
'Finestra' => 'Legno'
    
'Sacco' => 'Plastica'
    
'Coperta' => 'Lana'
    
'Scarpe' => 'Pelle'
); 
echo 
"<span class=\"brown\">Lettura delle chiavi e relativi vaslori</span><br />\n";
foreach (
$elements as $key => $value) {
    echo 
$key " ==> " $value "<br />\n";
}
?>

 

Lettura delle chiavi e relativi vaslori
Casa ==> Mattoni
Finestra ==> Legno
Sacco ==> Plastica
Coperta ==> Lana
Scarpe ==> Pelle

 

Cicli nidificati

gli array possono anche essere array di array; in questo caso è opportuno usare due cicli nidificati.

Questa procedura merita due parole in più perchè, come si vede dal frammento di codice qui sotto, andremo a lavorare con una matrice di matrici.
Le prime tre matrici: $nome_1, $nome_2, $nome_3 contengono dati relativi a: nome, cognome, data_nascita, residenza di altrettanti contatti.
Queste tre matrici le affidiamo ad una matrice che le accoglierà tutte: $persone.
Per distinguere le tre matrici, alla matrice $persone, anzichè assegnare una chiave numerica, viene assegnato un indice alfanumerico: nominativo_1, nominativo_2, nominativo_3 che la rende una matrice associativa (come si nota dalla soluzione alternativa, non è obbligatorio compiere tale associazione in questa maniera),
Veniamo così ad avere una matrice di matrici.

Vediamo ora una tecnica per poter leggere correttamente tutto il contenuto di questa matrice.
Col primo ciclo esterno, vengono estratti la chiave e la matrice abbinata a tale chiave ed affidati alle variabili $nominativo e $matrice
Col secondo ciclo, vengono estratte le chiavi ed i valori finali della matrice abbinata alla chiave precedentemente estratta ed affidati alle variabili $field e $dato. Questi saranno i dati finali.
Per la soluzione alternativa si sarebbe potuto duplicare il primo metodo, ma ho preferito mostrare un'altra soluzione alternativa.
Col semplice ciclo for scorriamo gli indici numerici della matrice $persone_bis.
Usando questo indice, col ciclo foreach, vengono puntate le varie matrici contenute in $persone_bis[$i] e letti le relative chiavi e valori.
Come si noterà dall'output di questo metodo alternativo le chiavi delle matrici sono numeriche ed iniziano da "0".

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?php
$nome_1 
= array(
    
'nome' => 'Mario'
    
'cognome' => 'Rossi'
    
'data_nascita' => '15/06/1973'
    
'residenza' => 'Roma'
);
$nome_2 = array(
    
'nome' => 'Paolo'
    
'cognome' => 'Bianchi'
    
'data_nascita' => '05/04/1968'
    
'residenza' => 'Torino'
);
$nome_3 = array(
    
'nome' => 'Luca'
    
'cognome' => 'Verdi'
    
'data_nascita' => '26/11/1964'
    
'residenza' => 'Napoli'
);
$persone = array( 
    
'nominativo_1' => $nome_1,
    
'nominativo_2' => $nome_2,
    
'nominativo_3' => $nome_3
);
//    assegnazione alternativa
$persone_bis = array (
    
$nome_1,
    
$nome_2,
    
$nome_3
);
/*
echo "<pre>\n";
var_dump ($persone);
echo "</pre>\n";
*/
foreach ($persone as $nominativo => $matrice) {
    echo 
"Per <span class=\"brown\">" $nominativo "</span><br />\n";
    foreach (
$matrice as $field => $dato) {
        echo 
$field " => " $dato "<br />\n";
    }
    echo 
"<br />\n";
}
echo 
"<hr />\n";
//    output per assegnazione alternativa
for ($i 0$i count ($persone_bis); $i++) {
    echo 
"Per <span class=\"brown\">" $i "</span><br />\n";
    foreach (
$persone_bis[$i] as $field => $dato) {
        echo 
$field " => " $dato "<br />\n";
    }
    echo 
"<br />\n";
}
?>

 

Per nominativo_1
nome => Mario
cognome => Rossi
data_nascita => 15/06/1973
residenza => Roma

Per nominativo_2
nome => Paolo
cognome => Bianchi
data_nascita => 05/04/1968
residenza => Torino

Per nominativo_3
nome => Luca
cognome => Verdi
data_nascita => 26/11/1964
residenza => Napoli


Per 0
nome => Mario
cognome => Rossi
data_nascita => 15/06/1973
residenza => Roma

Per 1
nome => Paolo
cognome => Bianchi
data_nascita => 05/04/1968
residenza => Torino

Per 2
nome => Luca
cognome => Verdi
data_nascita => 26/11/1964
residenza => Napoli

 

Funzioni array_keys(), array_values()

Questa, anche se con l'argomento c'entra in modo riflesso, vuol essere una chicca:
può succedere alle volte che si debba conoscere le chiavi di una matrice associativa o che, letto un valore si debba conoscere la sua relativa chiave. Ecco come fare.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
$elements 
= array(
    
'Casa' => 'Mattoni'
    
'Finestra' => 'Legno'
    
'Sacco' => 'Plastica'
    
'Coperta' => 'Lana'
    
'Scarpe' => 'Pelle'
); 
$elements_keys array_keys($elements);
$elements_values array_values($elements);
echo 
"<span class=\"brown\">Le chiavi della matrice</span><br />\n";
for (
$i 0$i count ($elements_keys); $i++) {
    echo 
$elements_keys[$i] . "<br />\n";
}
echo 
"<hr />\n";
echo 
"<span class=\"brown\">I valori della matrice</span><br />\n";
for (
$i 0$i count ($elements_values); $i++) {
    echo 
$elements_values[$i] . "<br />\n";
}
?>

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
echo "<span class=\"brown\">Estrarre la chiave relativa ad un valore</span><br />\n";
$elements = array(
    
'Casa' => 'Mattoni'
    
'Finestra' => 'Legno'
    
'Sacco' => 'Plastica'
    
'Coperta' => 'Lana'
    
'Scarpe' => 'Pelle'
);
$elemento "Legno";
$elements_keys array_keys($elements$elemento);
echo 
"L'elemento " $elemento " &egrave; associato a " $elements_keys[0] . "<br />\n";
?>

 

Le chiavi della matrice
Casa
Finestra
Sacco
Coperta
Scarpe

I valori della matrice
Mattoni
Legno
Plastica
Lana
Pelle

Estrarre la chiave relativa ad un valore
L'elemento Legno è associato a Finestra

 

 



settore tecnico il sito di lorettabweb il Forum di sostegno
il forum il forum il forum