W3docs

Comprensión de los Arrays Multidimensionales en PHP

Aprende a crear, acceder y recorrer arrays multidimensionales en PHP con ejemplos prácticos de código.

Un array multidimensional en PHP es un array cuyos elementos son a su vez arrays. Mientras que un array regular (indexado o asociativo) asigna a cada clave un único valor, un array multidimensional asigna a cada clave un array anidado completo, lo que te permite modelar datos en filas y columnas, cuadrículas, árboles y registros agrupados.

Este capítulo explica cómo crear arrays bidimensionales y de mayor profundidad, cómo leer y actualizar celdas individuales, cómo recorrerlos con foreach y las funciones más comunes para transformarlos. También señala los errores más frecuentes que cometen las personas al pasar de arrays planos a anidados.

¿Qué es un Array Multidimensional?

Un array se vuelve multidimensional en el momento en que uno de sus valores es otro array. La dimensión (o profundidad) es la cantidad de operaciones de índice que se necesitan para llegar a un valor escalar:

  • $a[0] llega a un valor → unidimensional
  • $a[0][1] llega a un valor → bidimensional
  • $a[0][1][2] llega a un valor → tridimensional, y así sucesivamente.

Un array bidimensional se visualiza a menudo como una tabla: el array externo contiene filas y cada array interno contiene las columnas de esa fila. Este modelo mental es útil, pero recuerda que los arrays de PHP son mapas ordenados, no cuadrículas rígidas: las filas pueden tener distintas longitudes y las claves pueden ser cadenas en lugar de 0, 1, 2. No existe un límite fijo de profundidad, aunque los datos muy anidados suelen ser una señal de que sería mejor usar objetos o una base de datos.

Creación de un Array Multidimensional

La forma más habitual es anidar literales de array. Cada array interno es un elemento del array externo.

Un array 2D de cadenas (una cuadrícula)

$grid = [
    ["value1", "value2", "value3"],
    ["value4", "value5", "value6"],
    ["value7", "value8", "value9"],
];

En código real, los arrays internos suelen ser asociativos, de modo que cada fila se lee como un registro:

Una lista de registros

$employees = [
    ["name" => "Ann",  "title" => "Engineer", "salary" => 65000],
    ["name" => "Bob",  "title" => "Designer", "salary" => 58000],
    ["name" => "Cara", "title" => "Manager",  "salary" => 72000],
];

También puedes construirlo de forma incremental, lo que resulta útil cuando los datos provienen de un bucle o de una consulta a la base de datos:

$matrix = [];
$matrix[0][0] = 1;
$matrix[0][1] = 2;
$matrix[1][0] = 3;
$matrix[1][1] = 4;
// $matrix is now [[1, 2], [3, 4]]

Acceso a los Elementos

Añade un conjunto de corchetes por dimensión. El primer índice selecciona el elemento externo (la fila); el segundo selecciona el elemento interno (la columna):

echo $grid[1][2];          // "value6" — row 1, column 2
echo $employees[2]["name"]; // "Cara"

PHP usa índices base cero, por lo que la segunda fila es [1] y la tercera columna es [2]. Leer una clave que no existe genera una advertencia y devuelve null; usa isset() o el operador de fusión de null para estar seguro:

$salary = $employees[5]["salary"] ?? 0; // no warning if the row is missing

Recorrer un Array Multidimensional

Los bucles foreach anidados son la forma idiomática de recorrer un array 2D: el bucle externo visita cada fila y el bucle interno visita los valores de esa fila:

$employees = [
    ["name" => "Ann",  "salary" => 65000],
    ["name" => "Bob",  "salary" => 58000],
];

foreach ($employees as $row) {
    foreach ($row as $key => $value) {
        echo "$key: $value\n";
    }
    echo "---\n";
}

Para registros tabulares, suele ser más limpio desestructurar directamente las claves internas:

foreach ($employees as $emp) {
    echo "{$emp['name']} earns {$emp['salary']}\n";
}
// Ann earns 65000
// Bob earns 58000

Modificar Elementos

Asigna a través de la ruta completa de índices para actualizar una celda concreta, y añade una nueva fila con [] o con array_push():

$employees[0]["salary"] = 70000;        // update one field
$employees[] = ["name" => "Dan", "salary" => 60000]; // add a row
array_pop($employees);                   // remove the last row

array_pop() elimina y devuelve la última fila, por lo que las dos operaciones anteriores se anulan entre sí.

Transformar con array_map y array_column

array_map() aplica un callback a cada elemento. Para transformar cada celda, mapea un array_map interno sobre cada fila:

Convertir a mayúsculas todos los valores de un array 2D

$grid = [["a", "b"], ["c", "d"]];

$upper = array_map(function ($row) {
    return array_map("strtoupper", $row);
}, $grid);
// $upper is [["A", "B"], ["C", "D"]]

Cuando los arrays internos son registros, array_column() extrae un campo concreto de cada fila en un array plano, lo que resulta perfecto para extraer una columna:

$employees = [
    ["name" => "Ann", "salary" => 65000],
    ["name" => "Bob", "salary" => 58000],
];

$names = array_column($employees, "name"); // ["Ann", "Bob"]
$total = array_sum(array_column($employees, "salary")); // 123000

Errores Frecuentes

  • Índices desfasados en uno. $grid[1][2] es la segunda fila, tercera columna: ambos índices son base cero.
  • Confundir el orden de los índices. $employees[0]["name"] funciona; $employees["name"][0] no, porque el array externo está indexado por enteros.
  • Claves indefinidas. Acceder a una fila o columna inexistente emite una advertencia y devuelve null. Protégete con isset() o ?? default.
  • Funciones que necesitan recursividad. El simple count($arr) solo cuenta el nivel superior: usa count($arr, COUNT_RECURSIVE). Para recorrer cada hoja, usa array_walk_recursive() en lugar de array_walk().
  • Semántica de copia. Los arrays de PHP se copian por valor, por lo que $copy = $original; seguido de editar $copy[0][0] no modifica $original, a diferencia de las referencias a objetos.

Conclusión

Los arrays multidimensionales te permiten representar tablas, cuadrículas y registros agrupados anidando un array dentro de otro. Lee y escribe celdas individuales con índices [] encadenados, itera con bucles foreach anidados, y transforma datos con array_map(), array_column() y las funciones recursivas de array. Para un recorrido más amplio del conjunto de herramientas de arrays de PHP, consulta PHP Arrays.

Práctica

Práctica
¿Qué son los arrays multidimensionales en PHP?
¿Qué son los arrays multidimensionales en PHP?
Was this page helpful?