PHP: Array Associativi

Marco Pegoraro, 21 Ottobre 2006

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!';
?>

Commenti all'articolo:

Ottima guida sull'utilizzo degli array associativi. Precisamente, grazie a te ho risolto il problema di leggere gli indici dell'array e verificare se esistono. Ancora grazie!
26/05/2007 20:49
by Giacomo
Grazie a te Giacomo!

Un commento del genere è ciò che ci vuole per andare avanti con questo blog!
28/05/2007 07:33
by thepeg
ho tre array unidimensionali :Es $matricola, $nome, $cogn,
e mi servirebbe crearne uno in cui $matricola sia indice degli altri due. Ma non riesco ad inserire come indice il valore del primo array perchè sebbene venga creato il nuovo array contiene indici numerici anzichè quello stringa del primo. Mi sai dire perchè e come fare?

31/05/2007 09:24
by gabri
Ciao Gabri, visto che era un po' lungo risponderti in un commento ho scritto un po' di codice PHP e l'ho inserito in un nuovo articolo:

Clicca Qui!
31/05/2007 09:58
by thepeg
molto ben fatto!! Ma coma faccio a inserire nuovi valori all interno di un array?
28/06/2007 12:41
by fertilia
articolo molto chiaro!! Ma come posso inserire nuovi valori all interno dello stesso array?
28/06/2007 12:47
by fertilia
Ciao Fertilia,
grazie per l'apprezzamento.

Per inserire nuovi valori in un array ci sono 2 modi:
1) $nome_array['chiave'] = 'nuovo valore';
2) array_push($nome_array, 'nuovo valore');

Il secondo metodo è sicuramente più "elegante" in quanto utilizza una funzione builtin ma richiede che l'array esista già.

Una precisazione: è possibile utilizzare il secono metodo anche con array associativi (cioè a chiave non numerica):

array_push($nome_array, 'chiave' => 'valore');
29/06/2007 12:58
by thepeg
Ciao Marco, innanzitutto complimenti per il tuo blog;
ho un problema sugli array associativi:
scrivendo il seguente codice mi dà un errore di Double_Arrow:
$nomearrayassociativo=("Chiave1"=>"Valore1","Chiave2"=>"Valore2","Chiave3"=>"Valore3","Chiave4"=>"Valore4","Chiave5"=>"Valore5");
COSA C'è di sbagliato?
17/08/2007 16:15
by Claudio
Bè, io ho testato il tuo codice aggiungendo la parola chiave "Array" prima della parentesi quadra di apertura della dichiarazione dell'array per valore e funziona.

Sinceramente non so se esistano configurazioni di PHP che permettano di omettere la parola chiave definendo così un array direttamente per valore.

In linea di massima una dichiarazione valida è:

$var = Array(
'Chiave1' => 'Valore1',
'Chiave2' => 'Valore2',
'Chiave3' => 'Valore3'
);

Ciao,
Marco.
19/08/2007 21:46
by thepeg
Interessante.
P.s.: se fai siti accessibili, per le scritte non dovresti usare quel verde su uno sfondo bianco... eh eh eh biricchino! (Il rapporto di contrasto di luminosità è: 2,21)
14/12/2007 11:37
by mike the bike
Hai ragione rigurardo al contrasto.
Diciamo che i siti accessibili al 100% li faccio per chi me li chiede... Quel verdino mi piace da morire sui titoli!!!

Ciao!
14/12/2007 12:18
by thepeg

Categorie: Php;


Leggi alcuni articoli correlati:


Aggiungi il Tuo Commento:

Inviando questa risposta dichiaro di aver letto ed approvato le condizioni di utilizzo di questo sito web.

(*) = campo obbligatorio.


Condizioni di Utilizzo:

1 - Tutte le risposte inviate a questo sito saranno sottoposte a moderazione manuale da parte dell'amministratore al fine di evitare il fenomeno detto "SPAM".

2 - Tutti i dati inseriti nel modulo di risposta verranno pubblicati in questa pagina ad eccezione dell'e-mail. Tale informazione viene richiesta ed archiviata dagli amministratori al fine di scoraggiare un utilizzo non consono del blog.

3 - Non utilizzare le risposte per pubblicizzare il tuo sito web. Tale tentativo verrà cancellato dall'amministratore. In ogni caso ai link inseriti nelle risposte viene applicato il "nofollow" per cui non ti portano vantaggi.
Se vuoi possiamo discutere uno scambio link: Srivimi!