[$a, $b] = $array; scompone gli elementi di un array in variabili separate in una riga: $a riceve $array[0], $b riceve $array[1]. list($a, $b) = $array; è la grafia più vecchia della stessa cosa, e ['name' => $name] = $user; lo fa per chiave.
Abbinare la destrutturazione a explode() è l'uso classico: dividi una stringa, dai un nome ai pezzi, vai avanti.
Saltare elementi
Lascia vuota una posizione per saltarla. Puoi anche fermarti prima: gli elementi inutilizzati alla fine vengono ignorati.
Destrutturare un array associativo per chiave
Con le chiavi, l'ordine nell'array non conta e prendi solo i campi che ti servono. La chiave si scrive prima di =>, la variabile dopo.
Gli schemi si annidano allo stesso modo per le liste: [[$x1, $y1], [$x2, $y2]] = $line; legge due punti in una volta. Da PHP 7.3 una variabile in uno schema può anche essere un riferimento, [, &$second] = $counts;, quindi modificare $second modifica l'array.
Un'assegnazione usa o le posizioni o le chiavi, mai entrambe. [$a, 'k' => $b] = $arr; si ferma con Cannot mix keyed and unkeyed array entries in assignments.
Scambiare due variabili
Costruisci un array dei due valori in ordine inverso e destrutturalo. Non serve una variabile temporanea.
Restituire più valori da una funzione
Una funzione PHP restituisce un solo valore, ma quel valore può essere un array. Destrutturarlo nel punto della chiamata lo fa sembrare più valori restituiti. Per più di due o tre valori, restituisci delle chiavi così chi chiama non può confondere l'ordine.
Destrutturazione in foreach
La stessa sintassi funziona nella riga del foreach, così ogni riga arriva già divisa in variabili con un nome. È ciò che si intende con "foreach con list()". Altri schemi di ciclo sono nella pagina su foreach.
L'operatore spread (...)
I tre puntini espandono un array sul posto. In un array letterale, [...$a, ...$b] unisce gli array. In una chiamata di funzione, f(...$args) passa gli elementi come argomenti separati. Nella definizione di una funzione, ...$args raccoglie gli argomenti in più in un array.
Prima di PHP 8.1, espandere un array con chiavi stringa era un errore; ora le chiavi stringa vengono mantenute e quelle numeriche rinumerate, con le stesse regole di array_merge(). I parametri variadici come ...$amounts sono trattati con gli altri tipi di parametro nella pagina sulle funzioni.
Errore comune: meno elementi che variabili
Se l'array è più corto dello schema, le variabili mancanti diventano null e PHP stampa un warning per ciascuna. Succede con input che non controlli, come una riga con dei campi mancanti. Per [$name, $city, $country] = explode(',', 'Grace'); PHP stampa:
Warning: Undefined array key 1 in /var/www/html/import.php on line 5
Warning: Undefined array key 2 in /var/www/html/import.php on line 5
Decidi cosa deve essere un pezzo mancante e completa l'array prima di destrutturarlo:
Per gli schemi con chiavi, unisci prima dei valori di default: ['a' => $a, 'b' => $b] = $input + ['a' => null, 'b' => null];. L'operatore + aggiunge solo le chiavi che $input non ha già.
Domande frequenti
Cosa fa list() in PHP?
list($a, $b) = $array; assegna $array[0] a $a e $array[1] a $b. Da PHP 7.1 la forma breve [$a, $b] = $array; fa esattamente lo stesso, ed entrambe le forme accettano chiavi: ['id' => $id] = $row;.
Come scambio due variabili in PHP?
Destruttura un nuovo array fatto con loro nell'ordine opposto: [$a, $b] = [$b, $a];. Non serve una variabile temporanea.
Posso usare list() con un array associativo in PHP?
Sì, da PHP 7.1. Indica le chiavi: ['name' => $name, 'email' => $email] = $user; oppure list('name' => $name) = $user;. Senza chiavi, [$a, $b] = $user; cerca le chiavi 0 e 1 e ottiene null con un warning.
Cosa sono i tre puntini (...) in PHP?
L'operatore spread. In un array letterale, [...$a, ...$b] copia gli elementi di entrambi gli array in uno nuovo. In una chiamata, max(...$numbers) passa gli elementi come argomenti separati. Nella definizione di una funzione, function sum(...$numbers) raccoglie un numero qualsiasi di argomenti in un array.
Cosa succede se l'array ha meno elementi delle variabili in list()?
Le variabili in più ricevono null, e PHP stampa un warning come Undefined array key 2. Completa prima l'array, per esempio [$a, $b, $c] = array_pad($parts, 3, null);.