$arr[] = array('A','B');
$arr[] = array('C','B');
...
Necesito obtener el resultado combinado de toda la matriz secundaria de $arr
.¿Cómo combinar subcampos en PHP más fácilmente?
Y para las entradas duplicadas, debe buscar solo una.
$arr[] = array('A','B');
$arr[] = array('C','B');
...
Necesito obtener el resultado combinado de toda la matriz secundaria de $arr
.¿Cómo combinar subcampos en PHP más fácilmente?
Y para las entradas duplicadas, debe buscar solo una.
array_unique(array_merge($arr[0], $arr[1]));
o para un caso ilimitado, creo que esto debería funcionar:
$result_arr = array();
foreach ($arr as $sub_arr) $result_arr = array_merge($result_arr, $sub_arr);
$result_arr = array_unique($result_arr);
bien a través de otra pregunta que me di cuenta de que lo que sigue es realmente posible (probé a mí mismo, sin éxito, que tenía el mal versión) si se utiliza versión de PHP> = 5.3.0:
$merged_array = array_reduce($arr, 'array_merge', array());
Si desea que los valores únicos que se pueden aplicar array_unique
:
$unique_merged_array = array_unique($merged_array);
Esto funciona si sólo tiene elementos planos en las matrices (es decir, no hay otras matrices). A partir de la documentación:
Nota: Tenga en cuenta que
array_unique()
no tiene como objetivo trabajar en matrices multidimensionales.
Si tiene matrices en sus matrices, entonces debe verificarlas manualmente, p. con array_walk
:
$unique_values = array();
function unique_value($value, &$target_array) {
if(!in_array($value, $target_array, true))
$target_array[] = $value;
}
array_walk($merged_values, 'unique_value', $unique_values);
Creo que se puede suponer que los bucles internos (es decir, lo que está haciendo array_walk
) son al menos no más lento que los lazos explícitos.
Si realmente no quiere bucle, intente esto:
$arr[] = array('A','B');
$arr[] = array('C','B');
$arr[] = array('C','D');
$arr[] = array('F','A');
$merged = array_unique(call_user_func_array('array_merge', $arr));
$ merged_array = array_reduce ($ serp_res, 'array_merge', array()); con cuotas adicionales, 'array_merge', funcionó para mí.
Esta respuesta se basa en la publicación de Felix Kling. Es una versión más precisa con la fijación de subelementos "sin matriz".
$res = array_reduce($res, function(&$res, $v) {
return array_merge($res, (array) $v);
}, array());
Gran solución y uso array_filter() para deshacerse de elementos de matriz vacíos causados por valores de matriz vacíos o cadenas agregadas previamente. Aquí está la versión final: $ res = array_filter (array_reduce ($ res, function (& $ res, $ v) {return array_merge ($ res, (array) $ v);}, array())); – Tarik
Para PHP 5.6 con el operador splat:
array_unique(array_merge(...$arr));
Una forma sencilla de manejar esto de la Versión PHP> = 5.6 es utilizar el operador splat también llamado Argument Unpacking.
`$ arr = array_unique (array_merge (... $ arr));
Puede tener más de 2 matrices secundarias. – user198729
Puede proporcionar los argumentos con cuántas matrices desea –
El número de matrices secundarias es dinámico. – user198729