list()
La función list() de PHP asigna valores a una lista de variables en una sola operación, extrayendo valores de un array de forma sencilla.
Introducción
list() es una construcción del lenguaje PHP (no una función) que desestructura un array, asignando cada uno de sus elementos a una variable separada en una sola sentencia. En lugar de extraer valores uno por índice, describes la forma del array en el lado izquierdo y dejas que PHP rellene las variables por ti.
Esta página cubre la sintaxis básica, la forma abreviada moderna [], cómo omitir y anidar elementos, la forma de clave asociativa (PHP 7.1+) y los errores comunes a tener en cuenta. list() es más útil cuando una función o expresión ya devuelve un array PHP y quieres nombrar sus partes.
Sintaxis Básica
La sintaxis básica de la construcción list() es la siguiente:
La sintaxis PHP de list()
list($var1, $var2, $var3) = $array;El $array del lado derecho proporciona los valores. La construcción los asigna a las variables de la izquierda por posición — el elemento 0 va a $var1, el elemento 1 a $var2, y así sucesivamente.
Sintaxis abreviada de array []
Desde PHP 7.1, puedes usar corchetes en lugar de la palabra clave list(). Las dos formas son equivalentes — la forma abreviada es ahora el estilo más común:
<?php
$point = [10, 20];
[$x, $y] = $point; // same as list($x, $y) = $point;
echo "$x, $y"; // Output: 10, 20Ejemplo de Uso
Aquí hay un ejemplo de cómo se puede utilizar la construcción list() en PHP:
Ejemplo de PHP list()
En este ejemplo, la construcción list() asigna los valores del array $fruits a las variables $fruit1, $fruit2 y $fruit3. Luego se muestra en pantalla la salida de cada variable.
Omisión de Elementos
Puedes ignorar los valores que no necesitas dejando vacío el espacio correspondiente. Solo se asignan los elementos que nombras:
<?php
$data = ['red', 'green', 'blue', 'yellow'];
// Grab only the third element; skip the rest
list(, , $third) = $data;
echo $third; // Output: blueLas dos comas iniciales omiten los elementos 0 y 1, por lo que $third recibe el elemento 2 ("blue").
Desestructuración Anidada
list() puede anidarse para desempaquetar arrays multidimensionales. La estructura en el lado izquierdo debe reflejar la estructura del array en el lado derecho:
<?php
$coords = [[1, 2], [3, 4]];
[[$x1, $y1], [$x2, $y2]] = $coords;
echo "$x1,$y1 $x2,$y2"; // Output: 1,2 3,4Intercambio de Variables
Dado que el lado derecho se evalúa completamente antes de la asignación, list() es una forma limpia de intercambiar dos variables sin necesitar una temporal:
<?php
$a = 'first';
$b = 'second';
[$a, $b] = [$b, $a];
echo "$a $b"; // Output: second firstUso Avanzado
La construcción list() también se puede combinar con otras funciones PHP para tareas más complejas. Por ejemplo, funciona bien con explode() para dividir una cadena en un array:
En este ejemplo, explode() divide la variable $string en un array. La construcción list() luego asigna los valores del array a $fruit1, $fruit2 y $fruit3. Luego se muestra en pantalla la salida de cada variable.
Además, list() admite arrays asociativos emparejando claves con variables:
<?php
$person = ['name' => 'Alice', 'age' => 30, 'city' => 'New York'];
list('name' => $name, 'age' => $age) = $person;
echo $name; // Output: Alice
echo $age; // Output: 30Ten en cuenta que la forma asociativa requiere que cada variable especifique su clave — no puedes mezclar entradas con clave y posicionales en el mismo list(). Esta forma es especialmente útil cuando se trabaja con datos estructurados como respuestas JSON o filas de bases de datos.
Desestructuración en un Bucle foreach
list() (o []) puede colocarse directamente en la posición de valor de un bucle foreach, desempaquetando cada fila mientras iteras. Este es un patrón común para arrays de pares o registros:
<?php
$people = [
['Alice', 30],
['Bob', 25],
];
foreach ($people as [$name, $age]) {
echo "$name is $age\n";
}
// Output:
// Alice is 30
// Bob is 25Errores Comunes
list()solo funciona con arrays. Pasar una cadena onullno lo desestructura carácter por carácter; las variables simplemente se establecen ennull(con una advertencia en caso denull).- Los elementos faltantes producen
null. Si el array tiene menos elementos que variables, las variables extra se convierten ennully PHP emite una advertenciaUndefined array key. Asegúrate de que el array sea suficientemente grande, o usa un valor predeterminado con el operador de fusión de nulos de antemano. - El orden de asignación no está garantizado. No confíes en qué variable se asigna primero dentro de un solo
list(); nunca escribas código donde un objetivo dependa de que otro se haya asignado antes en la misma sentencia. - No puedes mezclar entradas con clave y sin clave. Dentro de un
list(), o todas las entradas usan'key' => $varo ninguna lo hace.
Buenas Prácticas
- Úsalo para nombrar partes de arrays, no para construirlos.
list()lee de un array; nunca crea uno. Usaarray()/[]cuando necesites construir datos. - Usa nombres de variables significativos.
[$id, $name, $email] = $row;documenta la forma de$rowmucho mejor que$row[0],$row[1],$row[2]dispersos por tu código. - Prefiere la sintaxis abreviada
[]en PHP 7.1+ para mantener la coherencia con los literales de array que ya escribes. - Usa la forma con clave para datos asociativos de modo que no dependas silenciosamente del orden de inserción.
Conclusión
La construcción list() (y su equivalente moderno []) te permite desestructurar un array en variables nombradas en una sola sentencia expresiva — por posición, por clave, anidada o dentro de un foreach. Úsala para dar nombres significativos a las partes de arrays devueltos por funciones como explode(), y ten en cuenta los errores comunes mencionados anteriormente para que los valores faltantes o mal escritos no te sorprendan.