PHP dispone de varios métodos combinar dos más arrays en uno. Puedes usar tanto las funciones array_merge
o array_merge_recursive
como el operador +
. En este tutorial vamos a explicar estos tres métodos, así como las diferencias que existen entre ellos.
Contenidos
Cómo unir arrays con array_merge
Para unir dos arrays usando la función array_merge
basta con pasárselos como parámetros a la función:
array_merge($array1, $array2);
Por ejemplo, vamos a usar el método array_merge
con los siguientes arrays:
$array1 = [
'a',
'b',
];
$array2 = [
'c',
];
$resultado = array_merge($array1, $array2);
print_r($resultado);
Obtenemos el siguiente resultado:
[
0 => 'a',
1 => 'b',
2 => 'c',
]
Lo que hace el método array_merge
es agregar los elementos del segundo array (derecho) al primero (izquierdo). Los elementos del segundo array que contengan claves numéricas se agregarán al final del primer array con una nueva clave, siguiendo el orden secuencial del primer array.
Con este ejemplo lo verás más claro:
$array1 = [];
$array2 = [
1 => 'valor'
];
$resultado = array_merge($array1, $array2);
print_r($resultado);
Este sería el resultado:
[
0 => 'valor'
]
Tal y como puedes comprobar, los elementos del segundo array cuyas claves sean numéricas se agregan al primer array con una nueva clave.
Sin embargo, los elementos del segundo array que contengan claves de tipo cadena, se agregarán al primer array conservando su clave. En caso de que dicha clave de tipo cadena ya exista en el primer array, se sobrescribirá el valor de la clave en el primer array:
$array1 = [
'color' => 'rojo',
2,
4,
];
$array2 [
'a',
'b',
'color' => 'verde',
'forma' => 'cuadrado',
4,
];
$resultado = array_merge($array1, $array2);
print_r($resultado);
Este sería el resultado:
[
'color' => 'verde',
0 => 2,
1 => 4,
2 => 'a',
3 => 'b',
'forma' => 'cuadrado',
4 => 4
]
En caso de que quieras que los elementos del primer array no se sobrescriban por los del segundo y que a su vez, los elementos con clave numérica del segundo array no se reindexen en el primero, tendrás que usar el operador +
, que veremos a continuación.
También puedes usar la función array_merge
para unir más de dos arrays:
$array1 = ['a'];
$array2 = ['b'];
$array3 = ['c'];
$resultado = array_merge($array1, $array2, $array3);
Este sería el resultado:
[
0 => 'a',
1 => 'b',
2 => 'c',
]
Cómo unir arrays con el operador +
Para unir dos arrays usando el operador +
basta con usar el operador como si de una suma se tratase, sumando ambos elementos:
$array1 + $array2
Vamos a poner como ejemplo los siguientes arrays:
$array1 = [
'a',
'b',
];
$array2 = [
'c',
];
Cuando usamos el operador +
con los arrays de nuestro ejemplo, obtenemos el siguiente resultado:
$resultado = $array1 + $array2;
print_r($resultado);
Este sería el resultado:
[
0 => 'a',
1 => 'b',
]
Tal y como vemos, el operador +
mantiene las claves del primer array. Si ahora cambiamos el orden de los operandos, obtenemos el siguiente resultado:
$resultado = $array2 + $array1;
print_r($resultado);
Este sería el resultado:
[
0 => 'c',
1 => 'b',
]
Esto es debido a que el operador +
solamente agregará los elementos del segundo array (derecho) al primero (izquierdo) si la clave de los elementos del segundo array no existe en el primero. Por el contrario, el método array_merge
sobrescribe las claves existentes en el primer array.
Este comportamiento implica que no podamos usar el operador +
para unir arrays recursivamente, ya que los elementos existentes en el primer array no se modificarán:
$array1 = [
'A' => [
'B' => true,
'C' => true,
],
];
$array2 = [
'A' => [
'B' => false,
'C' => false,
],
];
$resultado = $array1 + $array2;
print_r($resultado);
Este sería el resultado:
[
'A' => [
'B' => true,
'C' => true,
],
]
Si por el contrario usamos la función array_merge
, obtendríamos el siguiente resultado:
[
'A' => [
'B' => false,
'C' => false,
],
]
También puedes usar el operador +
para unir más de dos arrays:
$array1 = ['a'];
$array2 = ['b'];
$array3 = ['c'];
$resultado = $array1 + $array2 + $array3;
Este sería el resultado, en el que como vemos, siempre tienen prioridad los elementos del array de la izquierda sobre el resto:
[
0 => 'a',
]
Cómo unir arrays con array_merge_recursive
La función array_merge_recursive
sirve para unir varios arrays recursivamente, conservando todos los elementos:
$array1 = [
'A' => [
'a' => 'rojo',
'b' => 'verde',
]
];
$array2 = [
'A' => [
'c' => 'azul',
'd' => 'amarillo',
]
];
$resultado = array_merge_recursive($array1, $array2);
print_r($resultado);
Este sería el resultado:
[
'A' => [
'a' => 'red',
'b' => 'green',
'c' => 'blue',
'd' => 'yellow',
]
Tal y como ves, los elementos del segundo array se agregan al primero, pero no solamente se agregan los elementos de nivel superior, sino también en los arrays que contenga cada uno de los elementos.
En caso de que alguna clave se repita en ambos arrays, dicho elemento se sustituirá en el primer array por un array que contenga los valores de la clave que se repite en ambos arrays:
$array1 = [
'A' => [
'a' => 'rojo',
'b' => 'verde',
]
];
$array2 = [
'A' => [
'c' => 'azul',
'd' => 'amarillo',
]
];
$resultado = array_merge_recursive($array1, $array2);
Este sería el resultado:
[
'A' => [
'a' => [
0 => 'red',
1 => 'blue',
]
'b' => 'green',
'd' => 'yellow',
]
]
Es decir, que cuando usamos la función array_merge_recursive
, se creará un array en el que se conservan los valores de ambos arrays, incluso aunque estos se repitan.
Y esto ha sido todo.