Как слить Subarray в PHP наиболее легко?

$arr[] = array('A','B'); $arr[] = array('C','B'); ... 

Мне нужно получить объединенный результат всего под массива $arr .

А для дублированных записей следует выбрать только один.

Solutions Collecting From Web of "Как слить Subarray в PHP наиболее легко?"

Если вы действительно не хотите зацикливаться, попробуйте следующее:

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

ОК через другой вопрос, я узнал, что на самом деле возможно (я пробовал себя без успеха, у меня была неправильная версия), если вы используете PHP версию> = 5.3.0 :

 $merged_array = array_reduce($arr, 'array_merge', array()); 

Если вам нужны только уникальные значения, вы можете применить array_unique :

 $unique_merged_array = array_unique($merged_array); 

Это работает, если у вас только плоские элементы в массивах (т. Е. Нет других массивов). Из документации:

Примечание. Обратите внимание, что array_unique() не предназначен для работы с многомерными массивами.

Если у вас есть массивы в ваших массивах, вам необходимо вручную проверить, например, с помощью 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); 

Я думаю, можно предположить, что внутренние петли (то есть, что делает array_walk ), по крайней мере, не медленнее, чем явные контуры.

 array_unique(array_merge($arr[0], $arr[1])); 

или для неограниченного случая, я думаю, что это должно работать:

 $result_arr = array(); foreach ($arr as $sub_arr) $result_arr = array_merge($result_arr, $sub_arr); $result_arr = array_unique($result_arr); 

$ merged_array = array_reduce ($ serp_res, 'array_merge', array ()); с добавленными квотами, «array_merge», работал для меня.

Этот ответ основан на записи Феликса Клинга. Это более точная версия с фиксированными подэлементами «non array».

 $res = array_reduce($res, function(&$res, $v) { return array_merge($res, (array) $v); }, array()); 

Для PHP 5.6 с оператором splat:

 array_unique(array_merge(...$arr)); 

Простым способом справиться с этим в PHP Version> = 5.6 является использование оператора splat, также называемого Argument Unpacking .

`$ arr = array_unique (array_merge (… $ arr));