При работе с данными часто возникают дубликаты, будь то повторяющиеся теги, email-адреса в списке рассылки или одинаковые товары в корзине. Функция `array_unique()` приходит на помощь, позволяя легко и быстро "очистить" массив от повторяющихся значений.
Она принимает на вход массив и возвращает новый, в котором каждое значение встречается только один раз. Важно помнить, что эта функция не меняет исходный массив, а создает новый. Также она сохраняет ключи первого вхождения каждого элемента, что является ее важной особенностью. В этом тренажере мы изучим, как работает `array_unique()`, разберем ее поведение с разными типами данных и научимся использовать флаги для более тонкой настройки сравнения.
- Модуль 1: Основы синтаксиса PHP
- Модуль 2: Переменные и типы данных
- Модуль 3: Операторы
- Модуль 4: Условные конструкции
- Модуль 5: Циклы
- Модуль 6: Массивы
- Индексированные массивы.
- Ассоциативные массивы.
- Многомерные массивы.
- Добавление элементов в массив.
- Удаление элементов из массива.
- Функция count().
- Функция array_push() и array_pop().
- Функция array_shift() и array_unshift().
- Функция array_merge().
- Функция array_slice().
- Функция array_splice().
- Функция in_array().
- Функция array_search().
- Функция array_keys() и array_values().
- Функция array_unique().
- Функция array_reverse().
- Сортировка: sort(), rsort().
- Сортировка: asort(), arsort().
- Сортировка: ksort(), krsort().
- Функция array_map().
- Функция array_filter().
- Функция array_reduce().
- Функция array_walk().
- Функция array_column().
- Деструктуризация массивов.
- Модуль 7: Функции
- Объявление функций.
- Вызов функций.
- Параметры функций.
- Возврат значений return.
- Значения параметров по умолчанию.
- Передача по значению.
- Передача по ссылке.
- Переменное количество аргументов.
- Оператор распаковки ....
- Типизация параметров.
- Типизация возвращаемых значений.
- Nullable типы.
- Union типы (PHP 8).
- Именованные аргументы (PHP 8).
- Анонимные функции.
- Стрелочные функции.
- Замыкания и use.
- Рекурсивные функции.
- Глобальные переменные в функциях.
- Статические переменные в функциях.
- Модуль 8: Работа со строками
- Одинарные и двойные кавычки.
- Экранирование символов.
- Heredoc и Nowdoc синтаксис.
- Функция strlen().
- Функция substr().
- Функция str_replace().
- Функция strpos() и strrpos().
- Функция explode() и implode().
- Функция trim(), ltrim(), rtrim().
- Функция strtolower() и strtoupper().
- Функция ucfirst() и ucwords().
- Функция str_repeat().
- Модуль 9: Суперглобальные переменные
- Модуль 10: Работа с формами
- Модуль 11: Работа с файлами
- Модуль 12: Дата и время
- Модуль 13: Регулярные выражения
- Модуль 14: Сессии и Cookie
- Модуль 15: Include и Require
- Модуль 16: Объектно-ориентированное программирование
- Модуль 17: Пространства имен
- Модуль 18: Обработка ошибок и исключений
- Модуль 19: Работа с JSON и XML
- Модуль 20: Работа с базами данных MySQLi
- Модуль 21: PDO - PHP Data Objects
- Модуль 22: Composer и зависимости
- Модуль 23: cURL и HTTP запросы
- Модуль 24: REST API
- Модуль 25: Безопасность
- Модуль 26: Генераторы и итераторы
- Модуль 27: Reflection API
- Модуль 28: Работа с изображениями
- Модуль 29: Отправка email
- Модуль 30: Паттерны проектирования
- Модуль 31: Тестирование
- Модуль 32: Продвинутые возможности PHP 8+
Базовое удаление дубликатов
Начнем с самого простого. У нас есть массив чисел с повторениями. Ваша задача — использовать нужную функцию, чтобы создать новый массив `$unique_numbers`, содержащий только уникальные значения из исходного.
<?php
$numbers = [1, 2, 2, 3, 4, 3, 5, 1];
// Получаем уникальные значения
$unique_numbers = input1S($numbers);
print_r($unique_numbers);
?>Сохранение ключей
Очень важная особенность `array_unique()` — она сохраняет ключи исходного массива для первого вхождения каждого элемента. Посмотрите на код и выберите вариант, который правильно отражает результат работы функции.
<?php
$fruits = [
'a' => 'apple',
'b' => 'orange',
'c' => 'apple',
'd' => 'banana'
];
$unique_fruits = array_unique($fruits);
print_r($unique_fruits);
?>Исправьте частую ошибку
Программист хотел удалить дубликаты из массива `$tags`, но забыл, что `array_unique()` не изменяет исходный массив, а возвращает новый. В результате `print_r()` выводит массив с дубликатами. Исправьте строку с вызовом функции.
<?php$tags = ['php', 'js', 'html', 'php', 'css']; // Ошибка: результат не присвоенarray_unique($tags); print_r($tags);?>Работа с разными типами данных
По умолчанию `array_unique()` использует нестрогое сравнение (`==`), приводя значения к строке. Это может приводить к неожиданным результатам. Предскажите, что выведет `print_r()`, обработав массив со смешанными типами данных.
<?php
$data = [1, '1', true, 0, false, null, 'hello'];
$unique_data = array_unique($data);
print_r($unique_data);
?>Использование флагов сортировки
Поведением `array_unique()` можно управлять с помощью второго аргумента — флага сортировки. Заполните пропуск, выбрав из банка флаг, который заставит функцию сравнивать элементы как строки, а не по стандартным правилам.
<?php
$items = [1, '01', '1', 2];
// Сравниваем элементы как строки
$unique_items = array_unique($items, input1S);
print_r($unique_items);
?>Числовое сравнение с флагом SORT_NUMERIC
Флаг `SORT_NUMERIC` заставляет `array_unique()` сравнивать все элементы как числа. Это полезно, когда у вас есть числа в виде строк. Предскажите, какой будет результат выполнения этого кода.
<?php
$scores = [10, '20', '+10', 30.0];
$unique_scores = array_unique($scores, SORT_NUMERIC);
print_r($unique_scores);
?>Практический пример: уникальные email-адреса
Представьте, что у вас есть список 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);