Un array (che in italiano possiamo tradurre con vettore) è tecnicamente un aggregato di valori, un “contenitore” di variabili che possono essere di tipi diverse: stringhe, interi, ecc.
Il buon uso di un array è estremamente utile, perché ci permette di aggirare problemi la cui risoluzione – fatta in altri modi – ci farebbe perdere diverso tempo. Php ci mette a disposizione numerose funzioni native, grazie alle quali potremmo gestirli senza troppi problemi.
Il tutorial di questo articolo è stato pensato come guida di base per l’uso degli array e delle funzioni che lo riguardano. E’ quindi adatto per chi si avvicina per la prima volta al php, ma sarà utile anche come ripasso per chi è già rodato.
In questo articolo partiremo dalle basi e vedremo come creare e gestire un array, come leggere gli elementi di un array e che cos’è un array multidimensionale. In un prossimo articolo ci concentreremo esclusivamente sulle funzioni legate agli array.
Per ogni definizione sarà dato un esempio. Alla fine del tutorial dovreste essere in grado di creare, manipolare e gestire con una certa scioltezza gli array.
Prima di addentrarci nel cuore dell’articolo, vediamo qualche definizione di base che può esserci utile.
Creazione di un array e gestione dei suoi elementi
In php non è necessario inizializzare le variabili, anche se sarebbe buona prassi farlo per evitare errori imprevisti; a ogni modo, un array vuoto di elementi si crea con questo sistema:
1 |
$contenitore=array(); |
Sia che abbiate definito o meno il vostro array, avete diverse possibilità per aggiungervi elementi:
1 2 3 4 5 6 7 |
//primo modo $contenitore=array("primo elemento", "secondo elemento", 3); //secondo modo $contenitore[]="primo elemento"; $contenitore[]="secondo elemento"; $contenitore[]=3; |
Nel primo caso, stiamo praticamente ridefinendo l’array inserendovi all’interno due stringhe (racchiuse tra virgolette) e un numero intero (non ha bisogno di virgolette). Un eventuale array $contenitore
già esistente sarebbe sovrascritto.
Nel secondo caso, invece, stiamo indicando all’array $contenitore
di aggiungere gli stessi tre elementi a quello che già contiene. Per adesso nei due metodi non abbiamo differenze, perché $contenitore
era vuoto; ma se avessimo già popolato in precedenza l’array con un elemento, chiamando il secondo metodo avremo l’array con quattro elementi anziché tre.
Come richiamiamo gli elementi così immessi nell’array?
Ogni volta che inserite un elemento, a questo viene associato un indice numerico progressivo a partire da 0. Questo significa che potremmo stampare a video le tre variabili in questo modo:
1 2 3 |
echo $contenitore[0]; //stampa a video "primo elemento" echo $contenitore[1]; //stampa a video "secondo elemento" echo $contenitore[2]; //stampa a video "3" |
Entrando un po’ più in profondità, scopriamo che è possibile assegnare un indice a piacere (anche di tipo stringa) per riferirsi a un elemento. Array costruiti in questo modo si dicono di tipo associativo. Aggiungiamo un quarto elemento al nostro array:
1 2 3 4 5 6 7 8 9 10 11 |
$contenitore['nuovo_elemento']="quarto elemento"; echo $contenitore['nuovo_elemento']; //stampa a video "quarto elemento" //questa chiamata va a sovrascrivere il precedente elemento che conteneva "secondo elemento" $contenitore[1]=2; echo $contenitore[1]; //stampa a video "2" //questi sono vari sistemi per stampare a video la scritta "Questo è il quarto elemento" echo "Questo è il $contenitore[nuovo_elemento]"; //notare l'assenza di apici echo "Questo è il {$contenitore['nuovo_elemento']}"; echo "Questo è il ".$contenitore[nuovo_elemento]; |
Infine, un array associativo può essere dichiarato anche in questo modo:
1 2 |
$contenitore=array('primo'=>'Questa è una stringa'); echo $contenitore['primo']; //stampa a video "Questa è una stringa" |
Nota: un’eventuale “buco” tra gli indici non sarà coperto in automatico con il successivo inserimento. Se, per esempio, abbiamo un array con indice 0, 1 e 3 (quindi il 2 mancante), la successiva chiamata $contenitore[];
avrà indice pari a 4 (e non a 2).
Leggere tutti gli elementi di un array
Il php ci mette anche a disposizione la funzione foreach()
per scorrere tutti gli elementi di un array in modo rapido. Possiamo inoltre estrarre la chiave (indice) e il valore dell’array in ben tre modi, usando le funzioni foreach()
, for()
e while()
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
//estrae tutti gli elementi in ordine e li stampa a video foreach($contenitore as $valore) echo $valore."<br />"; //il risultato è uguale al precedente (la funzione sizeof() recupera il numero di elementi dell'array) for($i=0; $i<sizeof($contenitore); $i++) echo $contenitore[$i]."<br />"; //estrare tutti gli elementi in ordine e stampa a video la chiave e il suo valore //per esempio, come secondo valore stamperà "1 secondo elemento" foreach($contenitore as $key => $value) echo $key." ".$value."<br />"; //il risultato è uguale al precedente while(list($key, $value)=each($contenitore)) echo $key." ".$value."<br />"; |
Array a due (o più) dimensioni
Addentriamoci un po’ più a fondo e facciamo un passo avanti. Gli array che abbiamo trattato fino a qua erano di tipo “monodimensionale”. Sebbene siano i più diffusi, a livelli più avanzati vi capiterà di adoperare quelli che tecnicamente vengono chiamati array multidimensionali o array associativi. Nella sostanza, si tratta di un array che al suo interno contiene degli elementi che sono a sua volta degli array (e non, quindi, una stringa o un intero come abbiamo visto fin’ora).
Un esempio (ho messo i vari elementi a capo per facilitare la visualizzazione, ma possono essere lasciati sulla stessa riga):
1 2 3 4 5 6 |
$contenitore = array( array('primo'=>'Array 1, elemento 1', 'secondo'=>'Array 1, elemento 2', 'terzo'=>'Array 1, elemento 3'), array('primo'=>'Array 2, elemento 1', 'secondo'=>'Array 2, elemento 2', 'terzo'=>'Array 2, elemento 3') ); echo $contenitore[0]['secondo']; //Array 1, elemento 2 echo $contenitore[1]['terzo']; //Array 2, elemento 3 |
In pratica, l’array $contenitore
contiene due elementi che sono a loro volta array. Ognuno di questi sotto-array contiene degli elementi a cui è stato associato un indice e un valore (per esempio l’elemento con indice “primo” ha valore “Array 1, elemento 1”).
Ogni array interno deve essere separato dagli altri con una virgola e a esso sarà associato automaticamente il classico indice progressivo a partire da 0.
Per richiamare il valore voluto, dobbiamo pensarlo come una tabella (per questo si parla di array bidimensionale): nella riga avremo l’indice che richiama il sottoarray, nella colonna avremo l’indice che richiama l’elemento interno al sottoarray. Per esempio, con echo $contenitore[1]['terzo'];
indichiamo: «Prendi il secondo elemento dell’array $contenitore
e, di questo, prendi l’elemento con indice ‘terzo’».