W3docs

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, 20

Esempio di Utilizzo

Ecco un esempio di come il costrutto list() può essere utilizzato in PHP:

Esempio di list() in PHP

php— editable, runs on the server

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: blue

Le 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,4

Scambiare 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 first

Utilizzo 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:

php— editable, runs on the server

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: 30

Si 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 25

Insidie Comuni

  • list() funziona solo con gli array. Passare una stringa o null non la destruttura carattere per carattere; le variabili vengono semplicemente impostate a null (con un avviso per null).
  • Gli elementi mancanti diventano null. Se l'array ha meno elementi delle variabili, le variabili in eccesso diventano null e PHP emette un avviso Undefined 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' => $var oppure 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. Usare array() / [] quando si ha bisogno di costruire dati.
  • Usare nomi di variabili significativi. [$id, $name, $email] = $row; documenta la struttura di $row molto 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.

Pratica

Pratica
Quali sono alcuni modi per creare un array indicizzato in PHP?
Quali sono alcuni modi per creare un array indicizzato in PHP?
Was this page helpful?