Как объединить подмассив в PHP наиболее легко?

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

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

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

6
задан user198729 26 January 2010 в 15:52
поделиться

3 ответа

Если вы действительно не хотите петлю, попробуйте это:

$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));
24
ответ дан 8 December 2019 в 02:09
поделиться

Хорошо, через другой вопрос, который я узнал, что следующее На самом деле возможен (я пробовал себя без успеха, у меня была неправильная версия), если вы используете 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 ), не менее не медленнее, чем явные петли.

13
ответ дан 8 December 2019 в 02:09
поделиться
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);
7
ответ дан 8 December 2019 в 02:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: