Array PHP

Array PHP

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.

Tipologie di array

Esistono tre diverse tipologie di array in PHP:

  • Array con indici numerici: array i cui elementi sono memorizzati e accessibili in maniera lineare tramite un indice numerico.
  • Array associativi: array i cui elementi sono individuati tramite una chiave di tipo string.
  • Array multidimensionali: array i cui elementi contengono altri array, formando una o più matrici di valori.

In questa guida analizziamo gli array con indici numerici.

Inizializzare un array

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:

  1. Tramite il costrutto array().
  2. Tramite la sintassi con le parentesi quadre [], 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.

Accedere ad un elemento

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

Aggiungere un elemento

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.

Modificare un elemento

È 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

Eliminare un elemento

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.

La funzione array_values()

È 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

Stampare un array

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.

Guida successiva: Array associativi