Menu

Arrays multidimensionales en PHP: anidados y bucles

Un array multidimensional en PHP es un array cuyos elementos son arrays, y se lee con un par de corchetes por nivel: $grid[1][2] o $users[0]['name']. Aprende a crear arrays anidados, leer y cambiar valores profundos, recorrerlos con foreach anidados, generar una tabla HTML, extraer una columna y ordenar filas.

Esta página incluye editores ejecutables: edita, ejecuta y ve el resultado al instante.

Un array multidimensional es un array cuyos elementos son arrays. Se lee con un par de corchetes por nivel: $grid[1][2] es la fila 1, columna 2, y $users[0]['name'] es el nombre del primer registro.

La segunda forma, una lista de registros con campos con nombre, es la que más vas a encontrar: es lo que suelen darte una consulta a una base de datos, una respuesta JSON decodificada o un archivo CSV procesado. Cada registro es un array asociativo.

Crear arrays anidados

El anidamiento puede llegar tan hondo como necesites, y los niveles pueden mezclar claves numéricas y de texto. Un array de configuración es un ejemplo habitual: secciones con nombre, cada una con ajustes o listas.

Añadir filas y valores anidados

$rows[] = [...] añade una fila completa. $arr['key'][] = $value añade dentro de una lista anidada, y PHP crea el array interior la primera vez, así que agrupar valores no necesita preparación.

Recorrer un array multidimensional

Usa un foreach por nivel. Para una lista de registros, normalmente basta con un bucle porque lees los campos por su nombre. Para una cuadrícula, el bucle interior recorre las celdas de cada fila.

Generar una tabla HTML a partir de un array

Un array de filas se corresponde directamente con una tabla HTML: las claves de la primera fila se convierten en el encabezado y cada fila en un <tr>. Ejecútalo y la pestaña Página muestra la tabla renderizada; cambia un valor o añade una fila y vuelve a ejecutarlo.

La forma foreach (...): ... endforeach; es el mismo bucle escrito para plantillas, de modo que el HTML sigue siendo legible.

Obtener una columna de todas las filas

array_column() extrae un campo de cada fila en una lista plana. Pásale un tercer argumento para indexar el resultado por otro campo, lo que convierte una lista de registros en una tabla de búsqueda.

Ordenar filas por un campo

usort() ordena las filas con una función de comparación. El operador nave espacial <=> devuelve -1, 0 o 1, que es justo lo que espera usort(). Intercambia $a y $b para ordenar de forma descendente.

count($players, COUNT_RECURSIVE) cuenta las 3 filas más los 6 campos que contienen, y por eso imprime 9.

Error frecuente: leer una clave profunda que puede faltar

Leer $config['cache']['ttl'] cuando no hay clave cache imprime Warning: Undefined array key "cache", seguido de Warning: Trying to access array offset on null para el siguiente nivel. El operador ?? comprueba toda la cadena de una vez y nunca avisa, así que es la forma segura de leer valores anidados opcionales.

Preguntas frecuentes

¿Cómo accedo a un valor de un array multidimensional en PHP?

Añade un par de corchetes por nivel: $matrix[1][0] es la fila 1, columna 0, y $users[0]['email'] es el email del primer usuario. Cada corchete lee del array que devuelve el anterior.

¿Cómo recorro un array multidimensional en PHP?

Anida un foreach por nivel: foreach ($rows as $row) { foreach ($row as $key => $value) { ... } }. Para un array de registros, normalmente basta un bucle y leer los campos por nombre: $row['name'].

¿Cómo añado un elemento a un array multidimensional?

Añade una fila completa con $rows[] = ['name' => 'Linus', 'age' => 54];, o añade dentro de un array anidado con $groups['admins'][] = 'Grace';. PHP crea el array interior si la clave todavía no existe.

¿Cómo creo un array 2D lleno de ceros en PHP?

Anida dos llamadas a array_fill(): $grid = array_fill(0, 3, array_fill(0, 4, 0)); da 3 filas de 4 ceros. Cada fila es su propia copia, así que $grid[0][0] = 5; cambia solo la primera fila.

Ilustración de los lenguajes de programación de Coddy

Aprende a programar con Coddy

COMENZAR