$arr[] = array('A','B');
$arr[] = array('C','B');
...
Я должен получить объединенный результат всего sub массива $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);