W3docs

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

Ejemplo de Uso

Aquí hay un ejemplo de cómo se puede utilizar la construcción list() en PHP:

Ejemplo de PHP list()

php— editable, runs on the server

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

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

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

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

php— editable, runs on the server

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

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

Errores Comunes

  • list() solo funciona con arrays. Pasar una cadena o null no lo desestructura carácter por carácter; las variables simplemente se establecen en null (con una advertencia en caso de null).
  • Los elementos faltantes producen null. Si el array tiene menos elementos que variables, las variables extra se convierten en null y PHP emite una advertencia Undefined 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' => $var o ninguna lo hace.

Buenas Prácticas

  • Úsalo para nombrar partes de arrays, no para construirlos. list() lee de un array; nunca crea uno. Usa array() / [] cuando necesites construir datos.
  • Usa nombres de variables significativos. [$id, $name, $email] = $row; documenta la forma de $row mucho 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.

Práctica

Práctica
¿Cuáles son algunas formas de crear un array indexado en PHP?
¿Cuáles son algunas formas de crear un array indexado en PHP?
Was this page helpful?