[$a, $b] = $array; répartit les éléments d'un tableau dans des variables séparées en une ligne : $a reçoit $array[0], $b reçoit $array[1]. list($a, $b) = $array; est l'ancienne écriture de la même chose, et ['name' => $name] = $user; le fait par clé.
Associer la déstructuration à explode() est l'usage classique : découper une chaîne, nommer les morceaux, passer à la suite.
Ignorer des éléments
Laissez une position vide pour l'ignorer. Vous pouvez aussi vous arrêter avant la fin : les éléments inutilisés en fin de tableau sont ignorés.
Déstructurer un tableau associatif par clé
Avec des clés, l'ordre dans le tableau n'a pas d'importance et vous ne prenez que les champs dont vous avez besoin. La clé s'écrit avant =>, la variable après.
Les motifs s'imbriquent de la même façon pour les listes : [[$x1, $y1], [$x2, $y2]] = $line; lit deux points d'un coup. Depuis PHP 7.3, une variable dans un motif peut aussi être une référence, [, &$second] = $counts;, si bien que modifier $second modifie le tableau.
Une affectation utilise soit des positions, soit des clés, jamais les deux. [$a, 'k' => $b] = $arr; s'arrête avec Cannot mix keyed and unkeyed array entries in assignments.
Échanger deux variables
Construisez un tableau des deux valeurs dans l'ordre inverse et déstructurez-le en retour. Aucune variable temporaire nécessaire.
Renvoyer plusieurs valeurs depuis une fonction
Une fonction PHP renvoie une seule valeur, mais cette valeur peut être un tableau. La déstructuration à l'appel la fait lire comme plusieurs valeurs de retour. Au-delà de deux ou trois valeurs, renvoyez des clés pour que l'appelant ne puisse pas se tromper d'ordre.
Déstructuration dans foreach
La même syntaxe fonctionne dans la ligne foreach, si bien que chaque ligne arrive déjà découpée en variables nommées. C'est ce qu'on appelle « foreach avec list() ». D'autres modèles de boucle sont sur la page foreach.
L'opérateur de décomposition (...)
Les trois points déballent un tableau sur place. Dans un littéral de tableau, [...$a, ...$b] fusionne des tableaux. Dans un appel de fonction, f(...$args) passe les éléments comme arguments séparés. Dans une définition de fonction, ...$args rassemble les arguments supplémentaires dans un tableau.
Avant PHP 8.1, décomposer un tableau à clés de type chaîne était une erreur ; désormais les clés de type chaîne sont gardées et les clés numériques renumérotées, selon les mêmes règles qu'array_merge(). Les paramètres variadiques comme ...$amounts sont présentés avec les autres types de paramètres sur la page des fonctions.
Erreur fréquente : moins d'éléments que de variables
Si le tableau est plus court que le motif, les variables manquantes valent null et PHP affiche un warning pour chacune. Cela arrive avec des entrées que vous ne maîtrisez pas, comme une ligne avec des champs manquants. Pour [$name, $city, $country] = explode(',', 'Grace');, PHP affiche :
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
Décidez de ce que doit valoir un morceau manquant et complétez le tableau avant de le déstructurer :
Pour les motifs avec clés, fusionnez d'abord des valeurs par défaut : ['a' => $a, 'b' => $b] = $input + ['a' => null, 'b' => null];. L'opérateur + n'ajoute que les clés que $input n'a pas déjà.
Questions fréquentes
Que fait list() en PHP ?
list($a, $b) = $array; affecte $array[0] à $a et $array[1] à $b. Depuis PHP 7.1, la forme courte [$a, $b] = $array; fait exactement la même chose, et les deux formes acceptent des clés : ['id' => $id] = $row;.
Comment échanger deux variables en PHP ?
Déstructurez un nouveau tableau formé de ces variables dans l'ordre inverse : [$a, $b] = [$b, $a];. Aucune variable temporaire n'est nécessaire.
Peut-on utiliser list() avec un tableau associatif en PHP ?
Oui, depuis PHP 7.1. Nommez les clés : ['name' => $name, 'email' => $email] = $user; ou list('name' => $name) = $user;. Sans clés, [$a, $b] = $user; cherche les clés 0 et 1 et obtient null avec un warning.
Que sont les trois points (...) en PHP ?
L'opérateur de décomposition. Dans un littéral de tableau, [...$a, ...$b] copie les éléments des deux tableaux dans un nouveau. Dans un appel, max(...$numbers) passe les éléments comme arguments séparés. Dans une définition de fonction, function sum(...$numbers) rassemble un nombre quelconque d'arguments dans un tableau.
Que se passe-t-il si le tableau a moins d'éléments que de variables dans list() ?
Les variables en trop reçoivent null, et PHP affiche un warning comme Undefined array key 2. Complétez d'abord le tableau, par exemple [$a, $b, $c] = array_pad($parts, 3, null);.