array_diff

(PHP 4 >= 4.0.1, PHP 5, PHP 7, PHP 8)

array_diffВычисляет расхождение массивов

Описание

array_diff(array$array, array...$arrays): array

Сравнивает массив, переданный в параметр array, с одним или несколькими другими массивами и возвращает значения из массива array, которые отсутствуют во всех других массивах.

Список параметров

array

Исходный массив

arrays

Массивы, с которыми идёт сравнение

Возвращаемые значения

Возвращает массив (array), содержащий те элементы массива array, которых нет в любом другом массиве. Ключи в массиве array сохраняются.

Список изменений

ВерсияОписание
8.0.0 Теперь разрешается вызывать функцию только с одним параметром. Раньше требовалось не менее двух параметров.

Примеры

Пример #1 Пример использования array_diff()

<?php
$array1
= array("a" => "green", "red", "blue", "red");
$array2 = array("b" => "green", "yellow", "red");
$result = array_diff($array1, $array2);

print_r($result);
?>

Множественные совпадения в $array1 обрабатываются как одно. Результат будет следующим:

Array ( [1] => blue )

Пример #2 Пример использования array_diff() с несовпадающими типами

Два элемента считаются равными тогда и только тогда, когда (string) $elem1 === (string) $elem2. То есть, когда строковое представление одинаково.

<?php
// Это сгенерирует уведомление о том, что массив не может быть преобразован в строку.
$source = [1, 2, 3, 4];
$filter = [3, 4, [5], 6];
$result = array_diff($source, $filter);

// В то же время это нормально, поскольку объекты могут быть преобразованы в строку.
class S {
private
$v;

public function
__construct(string $v) {
$this->v = $v;
}

public function
__toString() {
return
$this->v;
}
}

$source = [new S('a'), new S('b'), new S('c')];
$filter = [new S('b'), new S('c'), new S('d')];

$result = array_diff($source, $filter);

// $result теперь содержит один экземпляр S('a');
?>

Чтобы использовать альтернативную функцию сравнения, смотрите array_udiff().

Примечания

Замечание:

Обратите внимание, что эта функция обрабатывает только одно измерение n-размерного массива. Естественно, вы можете обрабатывать и более глубокие уровни вложенности, например, используя array_diff($array1[0], $array2[0]);.

Смотрите также

  • array_diff_assoc() - Вычисляет расхождение массивов с дополнительной проверкой индекса
  • array_udiff() - Вычисляет расхождение массивов, используя для сравнения callback-функцию
  • array_intersect() - Вычисляет пересечение массивов
  • array_intersect_assoc() - Вычисляет пересечение массивов с дополнительной проверкой индекса
To Top