Fino ad ora abbiamo visto tipi di dati semplici: booleani, interi, float e stringhe. PHP è in grado di gestire anche tipi di dati "composti", tra cui gli array.
Gli array in PHP sono sequenze di valori di qualsiasi tipo chiamati elementi e accessibili tramite un indice. Sono una delle strutture dati più usate nella programmazione.
Gli array possono essere utilizzati per costruire strutture dati complesse come liste, hash table, pile, code.
Indice dei contenuti
Esistono tre diverse tipologie di array in PHP:
In questa guida analizziamo gli array con indici numerici.
Nella pratica gli array sono una serie di variabili tutte con lo stesso nome, ma con indice diverso.
PHP mette a disposizione due modi per inizializzare un array:
array()
.[]
, disponibile da PHP 5.4.In entrambi i casi gli elementi vanno separati da una virgola. Vediamo un esempio di utilizzo:
<?php
$carBrand = ['Ferrari', 'Porsche', 'Lamborghini'];
$carBrand = array('Ferrari', 'Porsche', 'Lamborghini');
echo "$carBrand[0]\n";
echo "$carBrand[1]\n";
echo "$carBrand[2]\n";
Nell'esempio abbiamo stampato a video gli elementi dell'array, semplicemente accedendo a ciascuno di loro tramite l'indice numerico.
Nota: per comodità è preferibile utilizzare la sintatti con le parentesi quadre.
Nota: gli indici numerici vengono assegnati automaticamente e partono da 0. Vedremo più avanti che è possibile aggiungere elementi all'array, specificando un indice a piacimento.
Oltre ad utilizzare direttamente l'indice numerico, è possibile accedere all'elemento di un array tramite alcune funzioni PHP speciali, che tengono traccia degli elementi dell'array tramite un puntatore:
current()
restituisce il valore dell'elemento corrente.key()
restituisce l'indice dell'elemento corrente.next()
restituisce l'elemento successivo, spostando di una posizione avanti il puntatore.prev()
restituisce l'elemento precedente, spostando di una posizione indietro il puntatore.reset()
restituisce il primo elemento, spostando il puntatore all'inizio dell'array.end()
restituisce l'ultimo elemento, spostando il puntatore alla fine dell'array.<?php
$carBrand = ['Ferrari', 'Porsche', 'Lamborghini'];
echo "Elemento corrente ".current($carBrand).", ".key($carBrand)."\n"; // Elemento corrente Ferrari, 0
next($carBrand);
echo "Elemento corrente ".current($carBrand).", ".key($carBrand)."\n"; // Elemento corrente Porsche, 1
prev($carBrand);
echo "Elemento corrente ".current($carBrand).", ".key($carBrand)."\n"; // Elemento corrente Ferrari, 0
reset($carBrand);
echo "Elemento corrente ".current($carBrand).", ".key($carBrand)."\n"; // Elemento corrente Ferrari, 0
end($carBrand);
echo "Elemento corrente ".current($carBrand).", ".key($carBrand)."\n"; // Elemento corrente Lamborghini, 2
Per aggiungere un nuovo elemento ad un array è sufficiente utilizzare la seguente sintassi:
<?php
$carBrand = ['Ferrari', 'Porsche', 'Lamborghini'];
$carBrand[] = 'Mclaren'; // Nuovo elemento
echo "$carBrand[3]"; // Output: Mclaren
$carBrand[25] = 'Bentley'; // Nuovo elemento
echo $carBrand[25]; // Output: Bentley
Quando si aggiungono nuovi elementi ad un array e non si specifica un indice, PHP riprende la numerazione partendo dall'indice numerico più alto. Dunque un nuovo elemento inserito avrà indice pari all'indice più grande incrementato di uno.
Nel nostro esempio, prima di inserire nuovi elementi, l'indice più alto è 2
, quindi l'elemento inserito alla riga 3 avrà indice pari a 3
.
Alla riga 7 abbiamo invece specificato 25
come indice, dunque un eventuale nuovo elemento inserito avrebbe indice pari a 26
.
È possibile modificare gli elementi di un array semplicemente riassegnando il valore ad un elemento tramite il suo indice numerico.
<?php
$carBrand = ['Ferrari', 'Porsche', 'Lamborghini'];
echo "$carBrand[1]\n"; // Porsche
$carBrand[1] = 'Bentley';
echo "$carBrand[1]"; // Bentley
Esistono diversi modi per eliminare un elemento da un array, uno di questi è tramite la funzione unset()
, utilizzata per eliminare qualsiasi variabile PHP dalla memoria.
<?php
$carBrand = ['Ferrari', 'Porsche', 'Lamborghini'];
echo "$carBrand[1]\n"; // stampa correttamente il valore Porsche
unset($carBrand[1]); // Dopo questa istruzione gli elementi dell'array avranno indici 0, 2
echo "$carBrand[1]"; // Genera un'errore
Nell'esempio abbiamo stampato il valore memorizzato nella variabile $carBrand[1]
, prima e dopo l'eliminazione dell'elemento. Nel secondo caso otteniamo il seguente errore
PHP Notice: Undefined offset: 1 in C:\Users\Zucchino\Desktop\test.php on line 8
in quanto stiamo tentando di accedere ad una posizione dell'array non più presente.
Nota: la cancellazione di un elemento provoca un "buco" nell'indicizzazione dell'array. Se si aggiunge un nuovo elemento, PHP riprende la numerazione partendo dall'indice numerico più alto.
È possibile utilizzare la funzione array_values()
per riassegnare gli indici numerici a seguito di una o più cancellazioni degli elementi di un array.
Di seguito è mostrato un esempio
<?php
$carBrand = ['Ferrari', 'Porsche', 'Lamborghini'];
echo "$carBrand[1]\n"; // stampa correttamente il valore Porsche
unset($carBrand[1]); // Dopo questa istruzione gli elementi dell'array avranno indici 0, 2
$carBrand = array_values($carBrand);
echo "$carBrand[1]"; // stampa il valore Lamborghini
Per stampare a video gli elementi di un array possiamo utilizzare una delle seguenti funzioni PHP: print_r()
oppure var_dump()
.
Vediamo un esempio di utilizzo per capire la differenza
<?php
$carBrand = ['Ferrari', 'Porsche', 'Lamborghini'];
print_r($carBrand);
var_dump($carBrand);
/*
Array
(
[0] => Ferrari
[1] => Porsche
[2] => Lamborghini
)
array(3) {
[0]=>
string(7) "Ferrari"
[1]=>
string(7) "Porsche"
[2]=>
string(11) "Lamborghini"
}
*/
Nel caso di print_r()
vengono stampati i valori dell'array con i corrispettivi indici.
Nel caso di var_dump()
vengono stampati i valori dell'array così come sono memorizzati, con l'indice associato e il tipo di dato. La funzione var_dump()
viene utilizzata per operazioni di debug del codice, ovvero per risolvere bug nel codice visualizzando lo stato delle variabili.
Nella prossima guida analizziamo gli array associativi, molto utilizzati nella programmazione PHP.