$arr[] = array('A','B'); $arr[] = array('C','B'); ...
Мне нужно получить объединенный результат всего под массива $arr
.
А для дублированных записей следует выбрать только один.
Если вы действительно не хотите зацикливаться, попробуйте следующее:
$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));