How to merge subarray values and remove duplicates? How to merge subarray values and remove duplicates? php php

How to merge subarray values and remove duplicates?


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);