$arr[] = array('A','B');
$arr[] = array('C','B');
...
I need to get the merged result of all sub array of $arr
.
And for duplicated entries,should fetch only one.
$arr[] = array('A','B');
$arr[] = array('C','B');
...
I need to get the merged result of all sub array of $arr
.
And for duplicated entries,should fetch only one.
If you really don't want to loop, try this:
$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));
OK through another question I found out that the following is actually possible (I tried myself without success, I had the wrong version) if you use PHP version >= 5.3.0:
$merged_array = array_reduce($arr, 'array_merge', array());
If you only want unique values you can apply array_unique
:
$unique_merged_array = array_unique($merged_array);
This works if you only have flat elements in the arrays (i.e. no other arrays). From the documentation:
Note: Note that
array_unique()
is not intended to work on multi dimensional arrays.
If you have arrays in your arrays then you have to check manually e.g. with 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);
I think one can assume that the internal loops (i.e. what array_walk
is doing) are at least not slower than explicit loops.
array_unique(array_merge($arr[0], $arr[1]));
or for an unlimited case, I think this should work:
$result_arr = array();
foreach ($arr as $sub_arr) $result_arr = array_merge($result_arr, $sub_arr);
$result_arr = array_unique($result_arr);
$result_arr = array_merge($result_arr, $sub_arr);
–
Ascocarp $merged_array = array_reduce($serp_res, 'array_merge', array()); with added quotas,'array_merge', worked for me.
This answer is based on Felix Kling post. It's more accurate version with fixing "non array" sub-elements.
$res = array_reduce($res, function(&$res, $v) {
return array_merge($res, (array) $v);
}, array());
For PHP 5.6 with splat operator:
array_unique(array_merge(...$arr));
A simple way to handle this in PHP Version >= 5.6
is to use the splat operator also called Argument Unpacking.
$arr = array_unique(array_merge(...$arr));
© 2022 - 2024 — McMap. All rights reserved.
array_unique
asarray_merge
will overwrite duplicate keys if found any. Can anybody please reply me? – Gutierrez