multidimensional concatenar combine array_merge_recursive array_merge array php arrays merge addition

php - concatenar - ¿Cuál es la diferencia entre array_merge y array+array?



concatenar arrays php (8)

Aquí hay una prueba ilustrativa simple:

$ar1 = [ 0 => ''1-0'', ''a'' => ''1-a'', ''b'' => ''1-b'' ]; $ar2 = [ 0 => ''2-0'', 1 => ''2-1'', ''b'' => ''2-b'', ''c'' => ''2-c'' ]; print_r($ar1+$ar2); print_r(array_merge($ar1,$ar2));

con el resultado:

Array ( [0] => 1-0 [a] => 1-a [b] => 1-b [1] => 2-1 [c] => 2-c ) Array ( [0] => 1-0 [a] => 1-a [b] => 2-b [1] => 2-0 [2] => 2-1 [c] => 2-c )

Observe que las claves no numéricas duplicadas tomarán el primer valor utilizando el operador de unión, pero el último utilizando el array_merge.

Para las teclas numéricas, el primer valor se usará con el operador de unión, mientras que todos los valores se usarán con la matriz_mergen, solo se volverá a indexar.

Generalmente uso el operador de unión para matrices asociativas y array_merge para numérico. Por supuesto, también puede usar array_merge para asociativo, solo que los valores posteriores sobrescriben los anteriores.

Una pregunta bastante simple. Cuál es la diferencia entre:

$merged = array_merge($array1, $array2);

y

$merged = $array1 + $array2;

?


Creo que array_merge sobrescribe claves non_numeric duplicadas, mientras que $array1 + $array2 no lo hace.


El signo + solo toma el valor de la primera ocurrencia de una tecla de matriz.
array_merge toma el valor de la última aparición de una clave de matriz.

Ejemplo:

$first = [''a''=>''one'', ''b''=>''two'', ''c''=>''three'']; $second = [''a''=>''fourth'', ''b''=>''fifth'', ''c''=>''sixth'', ''3''=>''number three'']; $merged = $first + $second; echo "<pre> plus sign merge/n"; var_dump($merged); $merged = array_merge($first,$second); echo "/n array_merge function merge/n"; var_dump($merged);

Esto produce:

combinación de signo más
array (4) {
["a"] =>
cadena (3) "uno"
["b"] =>
cadena (3) "dos"
["c"] =>
cadena (5) "tres"
[3] =>
cadena (12) "número tres"
}

fusión de funciones array_merge
array (4) {
["a"] =>
cadena (6) "cuarto"
["b"] =>
cadena (5) "quinto"
["c"] =>
cadena (5) "sexto"
[0] =>
cadena (12) "número tres"
}

Es interesante notar que este array_merge borra el índice ''3'' del número tres a pesar de que es una cadena, porque es un número.

Así que tenga cuidado al fusionarse con matrices array_merge con índices numéricos. Podrían perder sus llaves. si son importantes para ti, prepáralos con una cuerda.

entonces en lugar de ''3'' => ''three'' usa algo como ''_3'' => ''three''


La diferencia es:

El operador + toma la unión de las dos matrices, mientras que la función array_merge toma la unión, PERO las claves duplicadas se sobrescriben).


No puedo comentar sobre la respuesta, así que escribiré otra.

@ZalemCitizen simplemente está equivocado, la unión (+) SOBREescribirá los valores no vacíos con los vacíos:

$a = array(''foo'' => ''bar''); $b = array(''foo'' => null); var_dump($b+$a); var_dump(array_merge($a, $b));

Productos:

array(1) { ["foo"]=> NULL } array(1) { ["foo"]=> NULL }

Tenga en cuenta el orden de las matrices.


Otro ejemplo más (matrices sin claves explícitas; es obvio con respecto a cómo funcionan el operador + y array_merge , pero las cosas "obvias" son más simples cuando se ven;))

$a = array(''apple''); $b = array(''orange'', ''lemon''); echo ''$a + $b = ''; print_r($a + $b); echo ''array_merge($a, $b) = ''; print_r(array_merge($a, $b));

daré:

$a + $b = Array ( [0] => apple [1] => lemon ) array_merge($a, $b) = Array ( [0] => apple [1] => orange [2] => lemon )


Preste atención a otra diferencia: la unión (+) no sobrescribirá el valor no vacío con el valor vacío (considerando una misma clave), mientras que array_merge hará lo siguiente:

$a = array(''foo'' => ''bar''); $b = array(''foo'' => ''''); // or false or 0 print_r($a+$b); print_r(array_merge($a, $b);

Productos:

Array ( [foo] => bar ) Array ( [foo] => 0 )


array_merge() hace que todas las claves numéricas encontradas en las matrices de entrada sean reindexadas en la matriz resultante. El operador de unión + no causa un reindex.