list()
La funzione list() in PHP assegna valori a un elenco di variabili in una sola operazione, utile per estrarre elementi da un array.
Introduzione
list() è un costrutto del linguaggio PHP (non una funzione) che destruttura un array, assegnando ciascuno dei suoi elementi a una variabile separata in una singola istruzione. Invece di estrarre i valori un indice alla volta, si descrive la struttura dell'array sul lato sinistro e si lascia che PHP riempia le variabili automaticamente.
Questa pagina tratta la sintassi di base, la forma abbreviata moderna [], come saltare e annidare elementi, la forma con chiavi associative (PHP 7.1+) e le insidie comuni da evitare. list() è più utile quando una funzione o un'espressione restituisce già un array PHP e si vogliono dare nomi alle sue parti.
Sintassi di Base
La sintassi di base del costrutto list() è la seguente:
La sintassi PHP di list()
list($var1, $var2, $var3) = $array;L'$array sul lato destro fornisce i valori. Il costrutto li assegna alle variabili a sinistra per posizione — l'elemento 0 va in $var1, l'elemento 1 in $var2, e così via.
Sintassi abbreviata con array []
Da PHP 7.1, è possibile usare le parentesi quadre al posto della parola chiave list(). Le due forme sono equivalenti — la forma abbreviata è ora lo stile più diffuso:
<?php
$point = [10, 20];
[$x, $y] = $point; // same as list($x, $y) = $point;
echo "$x, $y"; // Output: 10, 20Esempio di Utilizzo
Ecco un esempio di come il costrutto list() può essere utilizzato in PHP:
Esempio di list() in PHP
In questo esempio, il costrutto list() assegna i valori dell'array $fruits alle variabili $fruit1, $fruit2 e $fruit3. Il valore di ciascuna variabile viene poi mostrato sullo schermo tramite echo.
Saltare Elementi
È possibile ignorare i valori non necessari lasciando vuoto lo slot corrispondente. Vengono assegnati solo gli elementi nominati:
<?php
$data = ['red', 'green', 'blue', 'yellow'];
// Grab only the third element; skip the rest
list(, , $third) = $data;
echo $third; // Output: blueLe due virgole iniziali saltano gli elementi 0 e 1, quindi $third riceve l'elemento 2 ("blue").
Destrutturazione Annidata
list() può essere annidato per spacchettare array multidimensionali. La struttura a sinistra deve rispecchiare la struttura dell'array a destra:
<?php
$coords = [[1, 2], [3, 4]];
[[$x1, $y1], [$x2, $y2]] = $coords;
echo "$x1,$y1 $x2,$y2"; // Output: 1,2 3,4Scambiare Variabili
Poiché il lato destro viene valutato completamente prima dell'assegnazione, list() è un modo pulito per scambiare due variabili senza usarne una temporanea:
<?php
$a = 'first';
$b = 'second';
[$a, $b] = [$b, $a];
echo "$a $b"; // Output: second firstUtilizzo Avanzato
Il costrutto list() può anche essere combinato con altre funzioni PHP per operazioni più complesse. Ad esempio, funziona bene con explode() per dividere una stringa in un array:
In questo esempio, explode() divide la variabile $string in un array. Il costrutto list() assegna poi i valori dell'array a $fruit1, $fruit2 e $fruit3. Il valore di ciascuna variabile viene poi mostrato sullo schermo tramite echo.
Inoltre, list() supporta gli array associativi abbinando le chiavi alle variabili:
<?php
$person = ['name' => 'Alice', 'age' => 30, 'city' => 'New York'];
list('name' => $name, 'age' => $age) = $person;
echo $name; // Output: Alice
echo $age; // Output: 30Si noti che la forma associativa richiede che ogni variabile specifichi la propria chiave — non è possibile mescolare voci con chiave e voci posizionali nello stesso list(). Questa forma è particolarmente utile quando si lavora con dati strutturati come risposte JSON o righe di database.
Destrutturazione in un Ciclo foreach
list() (o []) può essere utilizzato direttamente nella posizione del valore di un ciclo foreach, spacchettando ogni riga durante l'iterazione. Questo è un pattern comune per array di coppie o record:
<?php
$people = [
['Alice', 30],
['Bob', 25],
];
foreach ($people as [$name, $age]) {
echo "$name is $age\n";
}
// Output:
// Alice is 30
// Bob is 25Insidie Comuni
list()funziona solo con gli array. Passare una stringa onullnon la destruttura carattere per carattere; le variabili vengono semplicemente impostate anull(con un avviso pernull).- Gli elementi mancanti diventano
null. Se l'array ha meno elementi delle variabili, le variabili in eccesso diventanonulle PHP emette un avvisoUndefined array key. Assicurarsi che l'array sia abbastanza grande, oppure usare un valore predefinito con l'operatore null-coalescing in anticipo. - L'ordine di assegnazione non è garantito. Non fare affidamento su quale variabile viene assegnata per prima all'interno di un singolo
list(); non scrivere mai codice in cui un target dipende dall'assegnazione di un altro nella stessa istruzione. - Non è possibile mescolare voci con e senza chiave. All'interno di un
list(), o ogni voce usa'chiave' => $varoppure nessuna lo fa.
Buone Pratiche
- Usarlo per dare nomi alle parti di un array, non per costruire array.
list()legge da un array; non ne crea mai uno. Usarearray()/[]quando si ha bisogno di costruire dati. - Usare nomi di variabili significativi.
[$id, $name, $email] = $row;documenta la struttura di$rowmolto meglio di$row[0],$row[1],$row[2]sparsi nel codice. - Preferire la sintassi abbreviata
[]in PHP 7.1+ per coerenza con i letterali array già utilizzati. - Usare la forma con chiave per i dati associativi in modo da non dipendere silenziosamente dall'ordine di inserimento.
Conclusione
Il costrutto list() (e il suo equivalente moderno []) permette di destrutturare un array in variabili con nome in un'unica istruzione espressiva — per posizione, per chiave, in modo annidato o all'interno di un foreach. Usarlo per dare nomi significativi alle parti degli array restituiti da funzioni come explode(), tenendo a mente le insidie descritte sopra per evitare sorprese con valori mancanti o digitati erroneamente.