W3docs

Функция 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

php— editable, runs on the server

Этот код выведет следующее:

Array ( [0] => 1 )

Как видно, функция array_diff вернула значение 1, которое присутствует в $array1, но отсутствует в $array2. Обратите внимание, что исходный ключ (0) из первого массива сохранён.

Пример с string-значениями (чувствительность к регистру)

php— editable, runs on the server

Этот код выведет следующее:

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, вы можете упростить процесс разработки и с лёгкостью находить и обрабатывать нужные данные.

Практика

Практика
Что делает функция array_diff() в PHP?
Что делает функция array_diff() в PHP?
Was this page helpful?