Функция array_unique()

Тренажер по PHP для пользователей с начальным уровнем подготовки.

Тренажер PHP

При работе с данными часто возникают дубликаты, будь то повторяющиеся теги, email-адреса в списке рассылки или одинаковые товары в корзине. Функция `array_unique()` приходит на помощь, позволяя легко и быстро "очистить" массив от повторяющихся значений.

Она принимает на вход массив и возвращает новый, в котором каждое значение встречается только один раз. Важно помнить, что эта функция не меняет исходный массив, а создает новый. Также она сохраняет ключи первого вхождения каждого элемента, что является ее важной особенностью. В этом тренажере мы изучим, как работает `array_unique()`, разберем ее поведение с разными типами данных и научимся использовать флаги для более тонкой настройки сравнения.

Список тем

Базовое удаление дубликатов

id: 38971_task_unique_1

Начнем с самого простого. У нас есть массив чисел с повторениями. Ваша задача — использовать нужную функцию, чтобы создать новый массив `$unique_numbers`, содержащий только уникальные значения из исходного.

Заполните пропуски
<?php
$numbers = [1, 2, 2, 3, 4, 3, 5, 1];

// Получаем уникальные значения
$unique_numbers = input1S($numbers);

print_r($unique_numbers);
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Сохранение ключей

id: 38971_task_unique_2

Очень важная особенность `array_unique()` — она сохраняет ключи исходного массива для первого вхождения каждого элемента. Посмотрите на код и выберите вариант, который правильно отражает результат работы функции.

Выберите правильный вариант ответа
<?php
$fruits = [
    'a' => 'apple',
    'b' => 'orange',
    'c' => 'apple',
    'd' => 'banana'
];

$unique_fruits = array_unique($fruits);

print_r($unique_fruits);
?>
Сообщения
Проверить
Показать подсказку

Исправьте частую ошибку

id: 38971_task_unique_3

Программист хотел удалить дубликаты из массива `$tags`, но забыл, что `array_unique()` не изменяет исходный массив, а возвращает новый. В результате `print_r()` выводит массив с дубликатами. Исправьте строку с вызовом функции.

Найдите ошибку и исправьте
<?php
$tags = ['php', 'js', 'html', 'php', 'css'];
 
// Ошибка: результат не присвоен
array_unique($tags);
 
print_r($tags);
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Работа с разными типами данных

id: 38971_task_unique_4

По умолчанию `array_unique()` использует нестрогое сравнение (`==`), приводя значения к строке. Это может приводить к неожиданным результатам. Предскажите, что выведет `print_r()`, обработав массив со смешанными типами данных.

Что должно получиться?
<?php
$data = [1, '1', true, 0, false, null, 'hello'];

$unique_data = array_unique($data);

print_r($unique_data);
?>
Сообщения
Проверить
Показать подсказку

Использование флагов сортировки

id: 38971_task_unique_5

Поведением `array_unique()` можно управлять с помощью второго аргумента — флага сортировки. Заполните пропуск, выбрав из банка флаг, который заставит функцию сравнивать элементы как строки, а не по стандартным правилам.

Нужно правильно расставить в пропуски предложенные варианты
<?php
$items = [1, '01', '1', 2];

// Сравниваем элементы как строки
$unique_items = array_unique($items, input1S);

print_r($unique_items);
?>
SORT_STRING
SORT_NUMERIC
SORT_REGULAR
SORT_LOCALE_STRING
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Числовое сравнение с флагом SORT_NUMERIC

id: 38971_task_unique_6

Флаг `SORT_NUMERIC` заставляет `array_unique()` сравнивать все элементы как числа. Это полезно, когда у вас есть числа в виде строк. Предскажите, какой будет результат выполнения этого кода.

Выберите правильный вариант ответа
<?php
$scores = [10, '20', '+10', 30.0];

$unique_scores = array_unique($scores, SORT_NUMERIC);

print_r($unique_scores);
?>
Сообщения
Проверить
Показать подсказку

Практический пример: уникальные email-адреса

id: 38971_task_unique_7

Представьте, что у вас есть список email-адресов с дубликатами. Соберите из фрагментов кода скрипт, который очистит этот список, оставив только уникальные адреса, и выведет их. В банке есть лишние строки, которые не относятся к задаче.

Перетяните в правильном порядке строки из одного блока в другой
<?php
$unique_emails = array_unique($emails);
print_r($unique_emails);
$emails = ['a@a.com', 'b@b.com', 'a@a.com'];
?>
sort($emails);
echo count($unique_emails);
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку
НайтиКурс.Ру