respuesta de Adrien voluntad no es necesario producir una serie numerada secuencialmente a partir de matrices numeradas dos secuencialmente - aquí hay algunas opciones que:
array_values(array_unique(array_merge($array1, $array2)));
(respuesta de Adrien con renumeración de las llaves después)
array_keys(array_flip($array1)+array_flip($array2))
(Ponga los valores en las claves, y use el operador de la matriz de matriz)
array_merge($array1, array_diff($array2, $array1))
(Eliminar los valores compartidos de la segunda matriz antes de la fusión)
resultados
Índice de referencia (para la fusión de dos matrices de longitud 1.000 mil veces en mi sistema):
- únicos (versión de Adrien): 2.862163066864 segundo
- Values_Unique: 3.12 segundos
- Keys_Flip: 2,34 segundos
- Merge_Diff: 2,64 segundos
misma prueba, pero con las dos matrices de ser muy similar (al menos 80% duplicado):
- Unique (Adrien de versión): 2,92 segundos
- Values_Unique: 3.15 segundos
- Keys_Flip: 1,84 segundos
- Merge_Diff: 2,36 segundos
Parece que usar el operador de matriz de conjuntos para hacer la unión real es el método más rápido. Sin embargo, tenga en cuenta que array_flip
solo es seguro si los valores de la matriz son todas las cadenas o todos los enteros; si tiene que producir la unión de una matriz de objetos, recomiendo la versión con array_merge
y array_diff
.
1 para 'array_unique' – Sebastian
No entiendo por qué esto es aceptada y upvoted más de las respuestas que señalan el operador de unión (+). ¿Me estoy perdiendo algo sobre el operador sindical? – mwotton
El "operador sindical" de PHP no realiza una unión matemática. var_dump ([1,2] + [3,4]) tiene la unión matemática de [1,2,3,4] (debido a 4 valores), pero las dos matrices solo tienen dos claves únicas, por lo tanto, la secuencia de comandos generará [1,2] El operador de "unión" de PHP no tiene ninguna relación con una unión matemática. –