PHP array: cosa sono e come si usano

08 Jan 2020 | M.A.D.R.

Uno degli argomenti più interessanti (e a volte ostici) quando si inizia ad imparare a programmare in PHP sono gli Array.

Il linguaggio PHP dimostra una particolare espressività sintattica con gli array.

Si tratta delle strutture dati a scopo generico al centro di qualsiasi applicativo. Solitamente nei linguaggi di programmazione con il termine “array” si indica la struttura dati più semplice in grado di catalogare oggetti e permetterne il recupero in base alla posizione.

In PHP il termine array indica la struttura dati principale, molto potente, con cui può essere svolta qualsiasi operazione.

In PHP gli Array sono eterogenei pertanto possono contenere oggetti di vario genere, anche ulteriori array creando così strutture dati annidate.

Di base, si interagisce con un array passando tra le parentesi quadre la posizione (conteggiata a partire da 0) dell’elemento con cui si vuole lavorare.

Aspetto molto interessante è la possibilità di utilizzare gli array anche in modalità associativa dove, al posto di una chiave numerica di accesso, si avranno delle etichette univoche: per chi avesse già esperienza di programmazione, tale uso ricorda quello delle mappe di o dei dizionari di , tanto per intenderci.

Creare un Array in PHP

Un Array PHP può essere semplicemente creato in questo modo;

$data=[];

o inizializzando direttamente i suoi elementi mediante assegnazioni:

$ data [0]=0.1;
$ data [1]='dato';
$ data [2]=12;
$ data [3]=-12;

In questo caso, abbiamo inserito al suo interno.

Se si vuole avere reale conferma delle varie tipologie di dato utilizzate si può ricorrere all’uso di una funzione inventata appositamente a scopo di debug che mostra la struttura interne delle variabili PHP (non solo array): var_dump. Applicandola all’array appena creato, con l’invocazione di var_dump($data), otteniamo quanto riportato nella figura seguente:

La verifica del contenuto, oltre che tante altre operazioni, può essere svolta sfruttando il costrutto del ciclo. Uno dei modi più pratici è la versione PHP del foreach che itera ogni elemento di una struttura dati eseguendo su di esso le operazioni previste nel blocco di codice:

foreach ($data as $key=>$value) {
   // foo bar
}

Sinora abbiamo visto l’uso più immediato degli array, quello dove gli elementi sono indicati per posizione, ma quello associativo, già citato, riveste un ruolo di assoluto primo piano, vediamo come funziona.

Array associativi in PHP

Un elemento in un array può essere riconosciuto non solo dalla posizione, come detto precedentemente, ma anche in base ad una chiave univoca mediante la quale potrà essere estratto in maniera molto efficiente.

Supponiamo di voler registrare dei dati in un programma PHP.

Potremmo usare in questo caso proprio un array associativo:

$dato[' key1 ']=8;
$dato[' key2 ']=6;
$dato[' key3 ']=9;
$dato[' key4 ']=7;
$dato[' key5 ']=5;

PHP permette inoltre di estrarre sia l’elenco delle chiavi con la funzione array_keys() sia quello dei valori con array_values().

Funzioni per Array in PHP

Ciò che rende ancora più versatili ed utili gli array PHP è il grande numero di funzioni offerto a loro supporto.

Ne esistono molte e di categorie diverse ma qui di seguito proveremo ad individuarne alcune significative, suddivise per finalità.

Per cominciare, ce ne sono alcune che permettono di gestire la “popolazione” di un array.

Una delle più comuni in assoluto è count che restituisce la lunghezza di un array PHP ossia il numero di elementi presenti al suo interno al momento attuale.

... E non finisce qui....

La popolazione di un array può essere anche generata in automatico. Particolarmente utili in questi casi sono funzioni come array_fill() che crea un nuovo array riempito di elementi uguali e range() che inizializza una struttura dati con numeri progressivi.
Tanto per renderci conto del loro modus operandi, consideriamo che l’espressione array_fill(0, 10, -1) restituisce un nuovo array di 10 elementi tutti valorizzati con -1.

Questo sarebbe il suo var_dump:

array (size=10)
  0 => int -1
  1 => int -1
  2 => int -1
  …
  …
  8 => int -1
  9 => int -1

La funzione range può essere utile con espressioni tipo range(1,12) che riempie un array, nelle posizioni da 0 a 11, dei valori compresi tra 1 e 12. Tale funzione può rivelarsi utile anche nei cicli per programmare più facilmente un for che dovrebbe contare in un range di valori. Ad esempio, il seguente ciclo:

foreach (range(1,12) as $n)
{
   // operazioni da svolgere
}

si può considerare identico a:

for ($n=1; $n<=12; $n++)
{
   // operazioni da svolgere
}

Le funzioni appena viste sono state esemplificate nelle loro forme più semplici ma il loro comportamento può essere personalizzato mediante gli argomenti.

Lavoriamo con le chiavi degli array associativi!!!

Con array_key_exists() possiamo verificare se una determinata chiave. Il risultato è booleano quindi verrà restituito vero se l'elemento è stato individuato, falso altrimenti.

La funzione array_search()invece restituisce la chiave del primo oggetto trovato con quel valore.

Per la suddivisione di un array, possiamo usare altre funzioni tra cui array_slice e array_chunk.

  • La prima restituisce una porzione dell'array in base agli indici forniti: si potrebbe, ad esempio, richiedere tre elementi a partire dalla posizione 2 di un determinato array.
  • La seconda invece svolge un lavoro diverso suddividendo un array in porzioni della stessa dimensione.

Per citare un'ulteriore categoria possiamo pensare a funzioni che servono ad ordinare un array, azione fondamentale per individuare valori estremi in un intervallo e a questo scopo esistono sort e rsort ma PHP permette anche di portare il "disordine" tra gli elementi con le funzioni shuffle o array_rand che estrae alcuni elementi a caso dall'array.

Queste sono solo alcune delle funzioni disponibili (qui potete trovare un elenco completo di con relativa documentazione), le abbiamo scelte appositamente per dimostrare la vastità del campo d'azione in cui PHP ha predisposto strumenti per operare con queste strutture dati.

Soluzioni complete per ogni esigenza