[$a, $b] = $array; separa los elementos de un array en variables distintas en una sola línea: $a recibe $array[0] y $b recibe $array[1]. list($a, $b) = $array; es la forma antigua de escribir lo mismo, y ['name' => $name] = $user; lo hace por clave.
Combinar la desestructuración con explode() es el uso clásico: divides una cadena, nombras los trozos y sigues.
Saltarse elementos
Deja una posición vacía para saltártela. También puedes parar antes: los elementos sin usar del final se ignoran.
Desestructurar un array asociativo por clave
Con claves, el orden en el array no importa y tomas solo los campos que necesitas. La clave se escribe antes de => y la variable después.
Los patrones se anidan igual con listas: [[$x1, $y1], [$x2, $y2]] = $line; lee dos puntos a la vez. Desde PHP 7.3 una variable de un patrón también puede ser una referencia, [, &$second] = $counts;, de modo que cambiar $second cambia el array.
Una asignación usa posiciones o claves, nunca las dos. [$a, 'k' => $b] = $arr; se detiene con Cannot mix keyed and unkeyed array entries in assignments.
Intercambiar dos variables
Construye un array con los dos valores en orden inverso y desestructúralo de vuelta. No hace falta ninguna variable temporal.
Devolver varios valores desde una función
Una función de PHP devuelve un valor, pero ese valor puede ser un array. Desestructurar donde se llama hace que se lea como si devolviera varios valores. Con más de dos o tres valores, devuelve claves para que quien llama no pueda confundir el orden.
Desestructuración en foreach
La misma sintaxis funciona en la línea del foreach, así que cada fila llega ya separada en variables con nombre. A esto se refiere la gente con "foreach con list()". Hay más patrones de bucles en la página de foreach.
El operador spread (...)
Los tres puntos despliegan un array en el sitio. En un literal de array, [...$a, ...$b] une arrays. En una llamada a función, f(...$args) pasa los elementos como argumentos separados. En la definición de una función, ...$args reúne los argumentos extra en un array.
Antes de PHP 8.1, desplegar un array con claves de texto era un error; ahora las claves de texto se conservan y las numéricas se renumeran, con las mismas reglas que array_merge(). Los parámetros variádicos como ...$amounts se explican junto con los demás tipos de parámetros en la página de funciones.
Error frecuente: menos elementos que variables
Si el array es más corto que el patrón, las variables que faltan pasan a ser null y PHP imprime un warning por cada una. Esto ocurre con entradas que no controlas, como una línea a la que le faltan campos. Para [$name, $city, $country] = explode(',', 'Grace'); PHP imprime:
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
Decide qué debe ser una pieza que falta y rellena el array antes de desestructurar:
Para patrones con claves, mezcla antes los valores por defecto: ['a' => $a, 'b' => $b] = $input + ['a' => null, 'b' => null];. El operador + solo añade las claves que $input todavía no tiene.
Preguntas frecuentes
¿Qué hace list() en PHP?
list($a, $b) = $array; asigna $array[0] a $a y $array[1] a $b. Desde PHP 7.1 la forma corta [$a, $b] = $array; hace exactamente lo mismo, y las dos formas aceptan claves: ['id' => $id] = $row;.
¿Cómo intercambio dos variables en PHP?
Desestructura un array nuevo hecho con ellas en orden inverso: [$a, $b] = [$b, $a];. No hace falta ninguna variable temporal.
¿Puedo usar list() con un array asociativo en PHP?
Sí, desde PHP 7.1. Indica las claves: ['name' => $name, 'email' => $email] = $user; o list('name' => $name) = $user;. Sin claves, [$a, $b] = $user; busca las claves 0 y 1 y obtiene null con un warning.
¿Qué son los tres puntos (...) en PHP?
El operador spread. En un literal de array, [...$a, ...$b] copia los elementos de los dos arrays en uno nuevo. En una llamada, max(...$numbers) pasa los elementos como argumentos separados. En la definición de una función, function sum(...$numbers) reúne cualquier número de argumentos en un array.
¿Qué pasa si el array tiene menos elementos que variables en list()?
Las variables sobrantes reciben null, y PHP imprime un warning como Undefined array key 2. Rellena antes el array, por ejemplo [$a, $b, $c] = array_pad($parts, 3, null);.