Array unique: примеры (PHP)

Функция 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_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 при передаче неверного типа аргумента, вместо предупреждения.

Расширенные примеры

Удаление дубликатов объектов с callback
Пример php
<?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
<?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
<?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;

PHP array_unique function comments

En
Array unique Removes duplicate values from an array