Функция array_diff в PHP
Функция array_diff в PHP сравнивает массивы и возвращает значения, которые есть в первом массиве, но отсутствуют в остальных.
Функция array_diff в PHP — это встроенная функция, которая сравнивает массивы и возвращает значения, присутствующие в первом массиве, но отсутствующие во всех остальных. Она полезна, когда нужно найти разность множеств — например, сравнить данные из базы данных со значениями, отправленными через форму, или выяснить, какие элементы были удалены между двумя снимками списка.
В этой главе рассматривается принцип работы array_diff, её синтаксис, особенности обработки ключей и сравнения значений, а также типичные подводные камни. Глава является частью раздела Массивы PHP.
Как работает array_diff
Функция array_diff сравнивает два или более массива и возвращает новый массив, содержащий значения, которые есть в первом массиве, но отсутствуют ни в одном из последующих. Важно понимать два ключевых момента:
- Сравнение выполняется по значениям; ключи игнорируются. Сопоставляются только значения, однако ключи из первого массива сохраняются в результате (переиндексация не выполняется).
- Значения сравниваются как string. Внутренне PHP считает два элемента равными, когда
(string) $a === (string) $b. Поэтому целое число1и string"1"рассматриваются как одинаковые значения.
Синтаксис
Синтаксис функции array_diff выглядит следующим образом:
Синтаксис функции array_diff в PHP
array array_diff (array $array1, array $array2 [, array $... ]);Параметр array1 — это первый массив, значения которого нужно сохранить. Параметр array2 (и любые последующие массивы) — это массивы, с которыми выполняется сравнение. Функция возвращает значения из array1, которые не найдены ни в одном из остальных массивов.
Примеры
Рассмотрим несколько примеров использования функции array_diff в коде PHP.
Пример использования функции array_diff в PHP
Этот код выведет следующее:
Array ( [0] => 1 )Как видно, функция array_diff вернула значение 1, которое присутствует в $array1, но отсутствует в $array2. Обратите внимание, что исходный ключ (0) из первого массива сохранён.
Пример с string-значениями (чувствительность к регистру)
Этот код выведет следующее:
Array ( [1] => Banana )В этом примере сравнение строк чувствительно к регистру. Поскольку 'Banana' не совпадает точно с 'banana', оно возвращается как отличие. Ключ 1 (исходная позиция элемента Banana) сохраняется в результате.
Сравнение с несколькими массивами
Можно передать более двух массивов. Значение сохраняется, только если оно отсутствует во всех остальных массивах:
<?php
$array1 = [1, 2, 3, 4, 5];
$array2 = [2, 4];
$array3 = [5];
$result = array_diff($array1, $array2, $array3);
print_r($result);
?>Вывод:
Array ( [0] => 1 [2] => 3 )Значения 2 и 4 исключаются благодаря $array2, а 5 — благодаря $array3, оставляя 1 и 3 с их исходными ключами.
Переиндексация результата
Поскольку исходные ключи сохраняются, в результирующем массиве могут появляться пропуски в числовых ключах. Если нужен чистый список с последовательной индексацией, оберните вызов в array_values():
<?php
$result = array_values(array_diff([1, 2, 3], [2]));
print_r($result);
?>Вывод:
Array ( [0] => 1 [1] => 3 )Подводный камень: нестрогое сравнение на основе string
Поскольку элементы сравниваются как string, смешанные типы могут неожиданно совпасть:
<?php
$result = array_diff(['1', '2', 3], [1, 2]);
print_r($result);
?>Вывод:
Array ( [2] => 3 )Здесь '1' совпадает с 1, а '2' — с 2 (строковое сравнение), поэтому остаётся только 3. Объекты и массивы в качестве значений вызывают предупреждение, так как их нельзя корректно привести к string.
Связанные функции
array_diff сравнивает только значения. PHP предлагает варианты для разных задач:
array_diff_key()— сравнивает ключи вместо значений.array_diff_assoc()— сравнивает как ключи, так и значения.array_intersect()— противоположная функция: возвращает значения, присутствующие во всех массивах.array_merge()— объединяет массивы, а не вычитает их.
Заключение
Функция array_diff — это удобный инструмент для сравнения массивов и поиска различий между ними. Работаете ли вы с данными из базы данных или просто сравниваете списки значений, функция array_diff поможет быстро и легко найти значения, уникальные для одного массива. Используя эту функцию в коде PHP, вы можете упростить процесс разработки и с лёгкостью находить и обрабатывать нужные данные.