Nella prima lezione sugli array hai visto il concetto di array a indice numerico. Oggi imparerai ad utilizzare un secondo tipo di array: gli array associativi.
Un array associativo è un array che utilizza delle stringhe al posto dei numeri interi come indici delle posizioni.
Vediamo subito un esempio:
$arr['nome'] = 'Marco';
$arr['cognome'] = 'Pegoraro';
In questo primo esempio l'array si chiama $arr e ci ho inserito due valori rispettivamente all'indice "nome" e "cognome".
Da questo piccolo esempio risulta lampante l'utilità che gli array associativi assumono della gestione di informazioni strutturate.
Costruire le chiavi di un Array Associativo
Una chiave di array associativo deve essere composta da valori alfanumerici (lettere dalla "a" alla "z", maiuscole o minuscole, più le cifre da "0" a "9") e dai caratteri speciali "_" e "-".
Devi fare attenzione in quanto, come per le variabili, PHP è case sensitive ovvero fa distinzione tra lettere maiuscole e lettere minuscole. Nel seguente esempio ti risulterà tutto più chiaro:
$arr['nome'] = 'Marco';
$arr['Nome'] = 'Giovanni';
$arr['NOME'] = 'Alfonso';
L'array in questione viene riempito con 3 elementi ben distinti. Anche se la chiave utilizzata ti può sembrare uguale, l'utilizzo delle maiuscole le rende differenti.
Un array per gli esempi
Nella seguente porzione di codice crei un array associativo da utilizzare negli esempi successivi di questo articolo. Di fatto stai creanto un array contenente gli estremi dell'autore di questo sito. D'ora in poi fammi gli auguri!
<?php
// Creo un array associativo con un po' di valori.
$arr['nome'] = 'Marco';
$arr['cognome'] = 'Pegoraro';
$arr['natoIl'] = '30 Giugno 1981';
$arr['professione'] = 'Consulente Informatico per il Web';
$arr['sitoWeb'] = 'http://www.consulenza-web.com';
?>
Leggere da un Array Associativo
Un array associativo si legge allo stesso modo di un array a indice numerico: si utilizza l'indice!
La principale differenza nella tipologia degli indici utilizzati: gli array a indice numerico utilizzano numeri interi crescenti a partire da "0". Gli array associativi utilizzano una stringa alfanumerica che non possiede un ordine preciso.
Osserva attentamente l'esempio seguente:
<?php
echo $arr['nome'].' '.$arr['cognome'].' è un ';
echo $arr['professione'].'.<br />';
echo 'è nato il '.$arr['natoIl'].' ed il suo sito ';
echo 'web è <a href="'.$arr['sitoWeb'].'">clicca qui!</a>';
?>
In questo esempio hai utilizzato tutti i dati dell'array $arr per comporre una frase più o meno di senso compiuto. Nota che hai accesso ogni sigolo elemento dell'array utilizzando la sua chiave indice.
La notazione con le parentesi quadre è molto simile a quella già vista nella lezione precedente, tuttavia presta attenzione al fatto che con gli array associativi utilizzi delle stringhe come indici quindi la chiave va inserita negli apici (puoi usare anche i doppi apici ma secondo me i songoli sono migliori!)
Ciclare un Array Associativo
Anche gli array associativi possono essere ciclati in modo da visualizzare tutti i valori.
Con questo tipo di array però, oltre al valore in sè di una posizione, è importante sapere a quale chiave è associato il valore. Osserva l'esempio pratico:
<?php
foreach ( array_keys($arr) as $chiave ) {
echo $chiave.': '.$arr[$chiave].'<br />';
}
?>
In questo esempio utilizzi un ciclo "foreach" per ciclare l'array delle chiavi indice utilizzate in $arr.
L'array delle chiavi indice viene fornito dalla funzione array_keys integrata in PHP ed è un normale array a indice numerico. All'interno del ciclo disponi dunque di ogni indice nella variabile $chiave da utilizzare per visualizzarne il valore relativo.
La mio indice esiste?
Un problema molto diffuso nell'utilizzo degli array associativi è valutare l'esistenza di un indice. Se cerchi di visualizzare il contenuto di un indice inesistente ottieni un errore perciò è di fondamentale importanza sapere PRIMA se tale indice esiste.
<?php
// Questa istruzione produce un errore:
echo $arr['prova'];
// Ecco il modo giusto:
if ( array_key_exists($arr) )
echo $arr['prova'];
else
echo 'Indice inesistente!';
?>
