Как вы можете получить уникальные значения из нескольких массивов, используя 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]

5

Другие решения

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

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

0

По вопросам рекламы [email protected]