Как вы можете получить уникальные значения из нескольких массивов, используя array_unique?

Есть ли способ поместить два или более массивов в функцию array_unique()? Если нет, есть ли другое решение для получения уникальных результатов от нескольких массивов?

2 ответа

Решение

Ответ на первую часть вашего вопроса - НЕТ.

Определение функции array_unique в руководстве по PHP гласит, что array_unique принимает ровно два аргумента, один массив и необязательное целое число, которое определяет поведение функции сортировки.

array array_unique ( array $array [, int $sort_flags = SORT_STRING ] )

Вместо того, чтобы взять слово из руководства, вот несколько тестовых массивов.

$one_array      = ['thing', 'another_thing', 'same_thing', 'same_thing'];
$two_arrays     = ['A', 'B', 'C', 'thing', 'same_thing'];
$or_more_arrays = ['same_thing', 1, 2, 3];

Пара тестов показывает, что функция работает так, как объявлено:

$try_it = array_unique($one_array);

возвращается ['thing', 'another_thing', 'same_thing'];

$try_it = array_unique($one_array, $two_arrays);

дает вам предупреждение

Предупреждение: array_unique() ожидает, что параметр 2 будет целочисленным, задан массив

и возвращается null,

$try_it = array_unique($one_array, $two_arrays, $or_more_arrays);

также дает вам предупреждение

Предупреждение: array_unique() ожидает максимум 2 параметра, 3 заданных

и возвращается null,


Ответ на вторую часть вашего вопроса - ДА.

Чтобы получить уникальные значения с помощью array_unique, вам нужно иметь один массив значений. Вы можете сделать это, как прокомментировал u_mulder, используя array_merge объединить различные входные массивы в один перед использованием array_unique,

$unique = array_unique(array_merge($one_array, $two_arrays, $or_more_arrays));

возвращается

['thing', 'another_thing', 'same_thing', 'A', 'B', 'C', 1, 2, 3];

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

$multi_array_example = [
    [1, 2, 3],
    [2, 3, 4], 
    [3, 4, 5],
    [4, 5, 6]
];

Тогда вы можете использовать array_reduce с array_merge объединить их в один массив перед использованием array_unique,

$unique = array_unique(array_reduce($multi_array_example, 'array_merge', []));

возвращается [1, 2, 3, 4, 5, 6]

По умолчанию, array_unique() принимает два параметра, array, типа массив принимает входной массив и второй параметр, sorting типа int принимает поведение сортировки. Вы можете прочитать больше об этом в руководстве по PHP дляarray_unique(),

Но, как предлагает @u_mulder, вы сначала объединяете массив, возможно, во временный массив (вы можете узнать, как это сделать здесь), а затем применяете array_unique к этому временному массиву.

Другие вопросы по тегам