PHP Array Merge: Una Guía en Profundidad
La función array_merge() de PHP es una herramienta potente para combinar arrays en uno solo. Aprende cómo funciona con claves string, numéricas y arrays anidados.
La función array_merge() de PHP combina dos o más arrays en un único array. Acepta uno o más arrays como argumentos y devuelve un nuevo array; los arrays originales no se modifican. Esta guía explica cómo array_merge() maneja las claves string, las claves numéricas y los arrays anidados, los errores más comunes que hay que tener en cuenta, y cómo difiere del operador de unión +.
Las dos reglas que explican casi todos los resultados son:
- Las claves string que aparecen en más de un array son sobreescritas — gana el valor del array más tardío.
- Las claves numéricas nunca se sobreescriben. Cada valor se añade al final y las claves se reindexan secuencialmente a partir de
0.
Nota: A partir de PHP 8.0, pasar un argumento que no sea un array a
array_merge()lanza unTypeError. (En PHP 7 generaba una advertencia y devolvíanull.) Llamar aarray_merge()sin argumentos devuelve un array vacío.
Uso básico de array_merge()
El uso básico de la función array_merge() es sencillo. Simplemente pasa dos o más arrays como argumentos y la función devolverá un nuevo array resultado de combinarlos. Aquí tienes un ejemplo:
Ejemplo de la función array_merge de PHP
Salida:
Array
(
[color] => green
[0] => 2
[1] => 4
[2] => a
[3] => b
[shape] => rectangle
[4] => 4
)Observa dos cosas en la salida:
- La clave string
colorexiste en ambos arrays, por lo que el valor de$array2(green) sobreescribió el valor de$array1(red). - Las claves numéricas no se conservaron. Los
2y4originales de$array1y el4de$array2se mantuvieron todos (nada fue sobreescrito) y se renumeraron como0,1,4.
Reindexación de claves numéricas
Dado que las claves numéricas se renumeran, no puedes confiar en que las claves enteras originales sobrevivan a una combinación. Incluso llamar a array_merge() con un único array es una forma habitual y rápida de reindexarlo:
<?php
$nums = [10 => "a", 25 => "b", 7 => "c"];
$result = array_merge($nums);
print_r($result);
?>Salida:
Array
(
[0] => a
[1] => b
[2] => c
)Si necesitas conservar claves enteras específicas, usa el operador de unión + o array_replace() en su lugar.
Combinar arrays multidimensionales
La función array_merge() también puede usarse para combinar arrays multidimensionales. Para hacerlo, simplemente pasa cada array como argumento a la función. Aquí tienes un ejemplo:
PHP para combinar arrays multidimensionales usando array_merge_recursive
Salida:
Array
(
[color] => Array
(
[favorite] => green
)
[0] => 2
[1] => 4
[2] => a
[3] => b
[shape] => rectangle
[4] => 4
)Ten en cuenta que array_merge() no fusiona arrays anidados. Cuando dos arrays comparten una clave string cuyo valor es a su vez un array, el valor anidado del array posterior reemplaza al anterior por completo — aquí ["favorite" => "green"] simplemente sobreescribió ["favorite" => "red"]. Para fusionar arrays anidados de forma recursiva en lugar de sobreescribirlos, usa array_merge_recursive().
array_merge() vs el operador de unión
PHP también ofrece el operador de unión + para combinar arrays, pero su comportamiento es muy diferente al de array_merge(). El operador de unión conserva el valor del operando de la izquierda cuando hay colisión de claves, y nunca reindexe las claves numéricas.
<?php
$array1 = ["a", "b", "c"];
$array2 = ["x", "y", "z", "w"];
print_r(array_merge($array1, $array2)); // appends + reindexes
print_r($array1 + $array2); // keeps left, no reindex
?>Salida:
Array
(
[0] => a
[1] => b
[2] => c
[3] => x
[4] => y
[5] => z
[6] => w
)
Array
(
[0] => a
[1] => b
[2] => c
[3] => w
)Con array_merge(), todos los elementos se conservan y se renumeran. Con +, los índices 0–2 ya existían en $array1, por lo que prevalecen, y solo el índice 3 (w) se incorpora de $array2. Usa + cuando quieras rellenar claves faltantes (como combinar opciones de usuario sobre valores predeterminados) preservando los valores existentes y las claves enteras; usa array_merge() cuando quieras una lista plana indexada secuencialmente. Consulta Operadores de PHP para más información.
Combinar un array indexado con un array asociativo
Al combinar un array indexado con un array asociativo, los valores de ambos arrays se unen. Aquí tienes un ejemplo:
Ejemplo PHP de combinación de un array indexado con un array asociativo usando la función array_merge
Salida:
Array
(
[0] => a
[1] => b
[2] => c
[a] => apple
[b] => banana
[c] => cherry
)Como puedes ver, los valores de ambos arrays se combinan. Dado que los tipos de claves son diferentes (numérico vs. string), no se produce ninguna sobreescritura. Este es un detalle importante a tener en cuenta cuando se combinan arrays con diferentes tipos de claves.
Combinar un array asociativo con un array indexado
El resultado de combinar un array asociativo con un array indexado es similar. Los valores se combinan y las claves se conservan según su tipo. Aquí tienes un ejemplo:
PHP para combinar un array asociativo con un array indexado usando la función array_merge
Salida:
Array
(
[a] => apple
[b] => banana
[c] => cherry
[0] => a
[1] => b
[2] => c
)Como se muestra, los valores se combinan sin conflictos. Las claves string de $array1 se conservan, mientras que las claves numéricas de $array2 se reindexan a partir de 0.
Consideraciones de rendimiento
La función array_merge() tiene una complejidad temporal lineal, lo que significa que el tiempo que tarda en combinar arrays aumenta linealmente con el tamaño de los mismos. Por este motivo, es importante mantener al mínimo el número de arrays que se combinan y evitar usar la función con arrays extremadamente grandes.
Conclusión
La función array_merge() es una herramienta versátil para combinar arrays en PHP. Recuerda las dos reglas fundamentales: las claves string son sobreescritas por los arrays posteriores, mientras que las claves numéricas se añaden al final y se reindexan desde 0. Cuando esos comportamientos predeterminados no se adapten a tu caso, elige una función relacionada:
array_merge_recursive()— fusiona arrays anidados en lugar de sobreescribirlos.array_replace()— reemplaza valores por clave conservando las claves numéricas.- El operador de unión
+— conserva los valores del operando izquierdo y nunca reindexe. array_combine()— construye un array a partir de un array de claves y un array de valores separados.