Comprendere gli array PHP
Gli array PHP sono strutture dati per memorizzare collezioni di variabili, componente chiave della programmazione PHP per gestire grandi quantità di dati.
Un array PHP è una mappa ordinata: una singola variabile che contiene molti valori, ognuno raggiungibile tramite una chiave. Invece di dichiarare $fruit1, $fruit2, $fruit3, si utilizza un unico array $fruits e si accede ai suoi elementi per posizione o per nome. Gli array sono la struttura dati fondamentale in PHP — i risultati delle query, l'input dei form ($_POST), la configurazione e JSON arrivano tutti come array.
Questo capitolo tratta i tre tipi di array, come crearli e leggerli, come aggiungere, rimuovere e unire elementi, come iterare su di essi, e i problemi comuni in cui si incorre. Ogni esempio eseguibile stampa il proprio risultato così da vedere esattamente cosa produce PHP.
Tipi di array PHP
PHP ha tre forme di array e, internamente, sono tutte dello stesso tipo — una mappa ordinata di coppie chiave/valore:
- Gli array indicizzati usano chiavi intere automatiche che partono da
0. - Gli array associativi usano chiavi stringa scelte dall'utente.
- Gli array multidimensionali memorizzano altri array come valori, permettendo di costruire tabelle e strutture annidate.
// Indexed: keys 0, 1, 2 are assigned automatically
$fruits = ["apple", "banana", "cherry"];
// Associative: you pick the keys
$colors = ["apple" => "red", "banana" => "yellow", "cherry" => "dark red"];
// Multidimensional: values are themselves arrays
$basket = [
["name" => "apple", "qty" => 4],
["name" => "banana", "qty" => 6],
];Ciascuna forma ha il proprio capitolo dedicato: array indicizzati, array associativi e array multidimensionali.
Creare array PHP
Esistono due sintassi equivalenti. La sintassi breve [] (PHP 5.4+) è preferita nel codice moderno; la funzione array() più datata fa esattamente la stessa cosa.
// Short array syntax — recommended
$fruits = ["apple", "banana", "cherry"];
// Long syntax with the array() language construct
$fruits = array("apple", "banana", "cherry");È anche possibile costruire un array in modo incrementale. Assegnare a $arr[] aggiunge un elemento con la chiave intera successiva, mentre assegnare a una chiave nominata crea o sovrascrive quella voce:
$fruits = [];
$fruits[] = "apple"; // key 0
$fruits[] = "banana"; // key 1
$fruits["best"] = "fig"; // string key "best"Accedere agli elementi di un array
Si legge un valore con [], passando un indice intero per gli array indicizzati o una chiave stringa per quelli associativi.
<?php
$fruits = ["apple", "banana", "cherry"];
$colors = ["apple" => "red", "banana" => "yellow"];
echo $fruits[0]; // apple
echo "\n";
echo $colors["apple"]; // red
?>Leggere una chiave inesistente emette un avviso e restituisce null. Verificare prima con isset() (vero solo quando la chiave esiste e non è null) o array_key_exists() (vero anche quando il valore memorizzato è null), oppure fornire un valore predefinito con l'operatore null-coalescing:
<?php
$colors = ["apple" => "red"];
$banana = $colors["banana"] ?? "unknown"; // no warning, returns "unknown"
echo $banana;
?>Aggiungere e rimuovere elementi
PHP include funzioni dedicate per modificare un array da entrambi i lati:
array_push($arr, $value)— aggiunge alla fine (o semplicemente usare$arr[] = $value).array_pop($arr)— rimuove e restituisce l'ultimo elemento.array_unshift($arr, $value)— aggiunge all'inizio.array_shift($arr)— rimuove e restituisce il primo elemento, reindicizzando gli altri.unset($arr[$key])— elimina un elemento specifico (lascia un buco negli indici interi).
<?php
$fruits = ["apple", "banana", "cherry"];
array_push($fruits, "mango"); // ["apple","banana","cherry","mango"]
$last = array_pop($fruits); // $last = "mango"
unset($fruits[1]); // removes "banana", keys 0 and 2 remain
print_r($fruits);
?>Output:
Array
(
[0] => apple
[2] => cherry
)Notare il [1] mancante — unset() non rinumera. Per compattare le chiavi tornando a 0, 1, 2…, eseguire array_values($fruits). Per maggiori dettagli vedere array_push e array_pop.
Iterare sugli array
foreach è il modo idiomatico per scorrere un array; funziona sia per gli array indicizzati che per quelli associativi e fornisce sia la chiave che il valore.
<?php
$colors = ["apple" => "red", "banana" => "yellow", "cherry" => "dark red"];
foreach ($colors as $fruit => $color) {
echo "$fruit is $color\n";
}
?>Output:
apple is red
banana is yellow
cherry is dark redVedere il capitolo sul ciclo foreach e la panoramica generale sui cicli PHP per altri pattern.
Unire array
array_merge() combina due o più array in uno nuovo. Prestare attenzione a come gestisce le chiavi: le chiavi intere vengono rinumerate, ma le chiavi stringa collidono — il valore dell'array successivo sovrascrive quello di un array precedente con la stessa chiave stringa.
Output:
Array
(
[0] => apple
[1] => banana
[2] => cherry
[3] => mango
)Se si ha bisogno solo di accodare array numerati, l'operatore spread è un'alternativa concisa: $all = [...$fruits1, ...$fruits2];. Per unioni con chiavi stringa dove deve prevalere il primo valore, usare invece l'operatore +. Maggiori dettagli nel capitolo array_merge.
Funzioni di supporto utili
La libreria standard di PHP contiene dozzine di funzioni per gli array. Alcune di uso più frequente:
| Funzione | Cosa fa |
|---|---|
count($arr) | Numero di elementi |
in_array($v, $arr) | Se un valore esiste (dettagli) |
array_keys($arr) | Tutte le chiavi come nuovo array (dettagli) |
array_values($arr) | Tutti i valori, reindicizzati da 0 |
sort($arr) | Ordina i valori in-place (ordinare array) |
<?php
$fruits = ["apple", "banana", "cherry"];
echo count($fruits); // 3
echo "\n";
echo in_array("banana", $fruits) ? "yes" : "no"; // yes
?>Problemi comuni
- Le chiavi sono univoche. Assegnare a una chiave esistente la sovrascrive invece di aggiungere una seconda voce.
"1"e1collidono. Le chiavi stringa numeriche vengono convertite in interi, quindi$a["1"]e$a[1]sono lo stesso slot.- Gli array vengono copiati per valore. Passare un array a una funzione fornisce a quella funzione una copia; l'originale rimane invariato a meno che non lo si passi per riferimento (
&$arr). unset()lascia buchi. Usarearray_values()successivamente se si ha bisogno di un indice pulito e contiguo.
Conclusione
Gli array PHP sono il fondamento per memorizzare e organizzare i dati — da una semplice lista di valori a record annidati. Padroneggiare le tre forme, le operazioni di creazione/lettura/aggiunta/rimozione, foreach e alcune funzioni di supporto permette di gestire la grande maggioranza delle attività su dati reali in PHP. Da qui, approfondire gli array indicizzati, gli array associativi e l'ordinamento degli array.