Array unique: примеры (PHP)
array_unique(array $array, int $flags = SORT_STRING): arrayОписание функции array_unique
Функция array_unique предназначена для удаления дублирующихся значений из массива. Она часто используется при обработке данных, полученных из форм, баз данных или внешних источников, когда необходимо обеспечить уникальность элементов.
- array (обязательный) - входной массив.
- flags (опциональный) - флаги сравнения элементов. По умолчанию SORT_STRING.
- SORT_REGULAR - сравнение без изменения типов.
- SORT_NUMERIC - числовое сравнение.
- SORT_STRING - строковое сравнение.
- SORT_LOCALE_STRING - сравнение с учетом локали.
Базовые примеры использования
<?php
$array = ['яблоко', 'апельсин', 'яблоко', 'банан'];
$result = array_unique($array);
print_r($result);
?>Array
(
[0] => яблоко
[1] => апельсин
[3] => банан
)
<?php
$array = ['10', 10, 10.0];
$result = array_unique($array, SORT_STRING);
print_r($result);
?>Array
(
[0] => 10
)
<?php
$array = ['10', 10, 10.0];
$result = array_unique($array, SORT_REGULAR);
print_r($result);
?>Array
(
[0] => 10
[1] => 10
[2] => 10
)
Похожие функции в PHP
Подсчитывает количество всех значений массива. Полезна, когда нужно узнать не только уникальные значения, но и их частоту.
Комбинация array_flip и array_keys иногда дает тот же результат, что и array_unique, но работает только со строковыми или целочисленными значениями.
Позволяет реализовать собственную логику фильтрации уникальных значений, включая сложные условия сравнения объектов.
Распространенные ошибки
<?php
$array = ['a' => 'зеленый', 'b' => 'красный', 'c' => 'зеленый'];
$result = array_unique($array);
print_r($result);
?>Array
(
[a] => зеленый
[b] => красный
)
Ключ 'c' удаляется, что может нарушить логику, если важны именно ключи.
<?php
$array = [true, false, 1, 0, '1'];
$result = array_unique($array, SORT_REGULAR);
print_r($result);
?>Array
(
[0] => 1
[1] =>
)
Логические и строковые значения могут неожиданно совпадать при определенных флагах.
Изменения в новых версиях PHP
В PHP 7.2.0 параметр flags получил возможность использовать SORT_NUMERIC и SORT_LOCALE_STRING. В PHP 8.0.0 функция теперь выбрасывает TypeError при передаче неверного типа аргумента, вместо предупреждения.
Расширенные примеры
<?php
class Product {
public function __construct(public string $name) {}
}
$products = [
new Product('стол'),
new Product('стул'),
new Product('стол')
];
$unique = array_unique($products, SORT_REGULAR);
print_r($unique);
?>Array
(
[0] => Product Object
(
[name] => стол
)
[1] => Product Object
(
[name] => стул
)
)
Функция не работает напрямую, требуется предварительная обработка.
<?php
$array = [
['id' => 1, 'name' => 'Иван'],
['id' => 2, 'name' => 'Мария'],
['id' => 1, 'name' => 'Иван']
];
$serialized = array_map('serialize', $array);
$unique = array_unique($serialized);
$result = array_map('unserialize', $unique);
print_r($result);
?>Array
(
[0] => Array
(
[id] => 1
[name] => Иван
)
[1] => Array
(
[id] => 2
[name] => Мария
)
)
<?php
$array = ['a', 'b', 'a', 'c'];
$reversed = array_reverse($array);
$unique = array_unique($reversed);
$result = array_reverse($unique);
print_r($result);
?>Array
(
[2] => a
[1] => b
[3] => c
)
Аналоги в других языках
Array unique в Python
Используется преобразование в множество (set) или OrderedDict для сохранения порядка.
my_list = ['яблоко', 'апельсин', 'яблоко', 'банан']
unique_list = list(set(my_list))
print(unique_list)['банан', 'апельсин', 'яблоко']
Array unique в Javascript
Применяют Set или фильтрацию с indexOf.
const array = ['яблоко', 'апельсин', 'яблоко', 'банан'];
const uniqueArray = [...new Set(array)];
console.log(uniqueArray);['яблоко', 'апельсин', 'банан']
Array unique в MySQL
Используется DISTINCT в запросах SELECT.
SELECT DISTINCT column_name FROM table_name;