Entonces, ¿cuál es la diferencia entre estos 2: array_merge , plus sign (aunque tuve que cambiar las matrices)?
Joseph Silber
15
Una advertencia para los principiantes aquí, el resultado de la operación en ambos casos es nulo si cualquiera de las matrices es nulo . Es posible que a algunos no les importe esto asumiendo que, dado que se trata de una operación de unión, el resultado será la matriz adecuada (no nula) si una de ellas es nula . Pero, eso es cierto si una de las matrices es una matriz vacía. Entonces, como una buena práctica, creo que deberíamos inicializar las matrices de entrada como matrices vacías. ¿Qué dicen ustedes?
Sandeepan Nath
6
Si hay claves duplicadas, "tomar la unión" siempre tendrá que deshacerse de una de ellas. La diferencia está en cuál.
alexis
5
Lo siento, esta respuesta es confusa, incorrecta e incompleta. : -o Vea el comentario de @ alexis con respecto al bit confuso (aunque el suyo también es solo la mitad de la verdad con respecto al OP). 2. Vea la respuesta de Yehosef sobre lo que array_mergerealmente hace ... 3. Y vea la respuesta de BoltClock sobre otra diferencia crucial que no se menciona aquí: array_mergerestablece las teclas numéricas, a diferencia de +.
Sz.
no específico en absoluto. no es útil. no resalta la diferencia. demasiado alto nivel de explicación.
Tenga en cuenta que las claves no numéricas duplicadas tomarán el primer valor usando el operador de unión, pero el último usando el array_merge.
Para las claves numéricas, el primer valor se usará con el operador de unión, mientras que todos los valores se usarán con array_merge, recién indexado.
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 a los anteriores.
array_merge()hace que todas las claves numéricas que se encuentran en las matrices de entrada se vuelvan a indexar en la matriz resultante. El operador sindical +no provoca una reindexación.
Es interesante notar en esto que el array_mergeactally 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 fusionar array_mergematrices con índices numéricos. Pueden perder sus llaves. si son importantes para usted, precedalas con una cadena.
así que en lugar de '3' => 'three'usar algo como'_3' => 'three'
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;))
Preste atención a otra diferencia: la unión (+) no sobrescribirá el valor no vacío con un valor vacío (considerando la misma clave), mientras que array_merge lo hará:
$a = array('foo'=>'bar');
$b = array('foo'=>'');// or false or 0
print_r($a+$b);
print_r(array_merge($a, $b);
Respuestas:
La diferencia es:
El
+
operador toma la unión de las dos matrices, mientras que laarray_merge
función toma la unión PERO las claves duplicadas se sobrescriben.fuente
array_merge
realmente hace ... 3. Y vea la respuesta de BoltClock sobre otra diferencia crucial que no se menciona aquí:array_merge
restablece las teclas numéricas, a diferencia de+
.Aquí hay una prueba ilustrativa simple:
con el resultado:
Tenga en cuenta que las claves no numéricas duplicadas tomarán el primer valor usando el operador de unión, pero el último usando el array_merge.
Para las claves numéricas, el primer valor se usará con el operador de unión, mientras que todos los valores se usarán con array_merge, recién indexado.
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 a los anteriores.
fuente
array_merge()
hace que todas las claves numéricas que se encuentran en las matrices de entrada se vuelvan a indexar en la matriz resultante. El operador sindical+
no provoca una reindexación.fuente
Fuente: https://softonsofa.com/php-array_merge-vs-array_replace-vs-plus-aka-union/
Deje de usar array_merge ($ defaults, $ options):
Nota : la función array_replace existe desde PHP5.3.
fuente
El signo + solo toma el valor de la primera aparición de una clave de matriz.
array_merge toma el valor de la última aparición de una clave de matriz.
Ejemplo:
Esto produce:
Es interesante notar en esto que el
array_merge
actally 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 fusionar
array_merge
matrices con índices numéricos. Pueden perder sus llaves. si son importantes para usted, precedalas con una cadena.así que en lugar de
'3' => 'three'
usar algo como'_3' => 'three'
fuente
Creo que
array_merge
sobrescribe las claves$array1 + $array2
no numéricas duplicadas mientras que no lo hace.fuente
Otro ejemplo más (matrices sin claves explícitas; es obvio con respecto a cómo funcionan el operador
+
yarray_merge
, pero las cosas "obvias" son más simples cuando se ven;))daré:
fuente
Preste atención a otra diferencia: la unión (+) no sobrescribirá el valor no vacío con un valor vacío (considerando la misma clave), mientras que array_merge lo hará:
Salidas:
fuente
Entonces, aparentemente, si cambia el orden, tanto la unión como la fusión harán lo mismo
Salidas:
Tenga en cuenta el orden de las matrices.
fuente
$a+$b
vs$b+$a
. No se anula nada.