Противоположность array_intersect? - PullRequest
41 голосов
/ 07 апреля 2011

Есть ли встроенная функция для получения всех членов массива 1, которые не существуют в массиве 2?
Я знаю, как это сделать программно, только интересно, есть ли встроенная функция, которая делает то же самое,Поэтому, пожалуйста, без примеров кода.

Ответы [ 5 ]

62 голосов
/ 07 апреля 2011

Звучит как работа для array_diff.

Возвращает массив, содержащий все записи из массива1, которые не являются присутствует в любом другом массиве.

36 голосов
/ 26 апреля 2013

array_diff, безусловно, является очевидным выбором, но технически не является противоположностью массива interesect. Возьмите этот пример:

$arr1 = array('rabbit','cat','dog');

$arr2 = array('cat','dog','bird');

print_r( array_diff($arr1, $arr2) );

То, что вы хотите - это результат с «кроликом» и «птицей», но вы получите только кролика, потому что он ищет то, что находится в первом массиве, а не во втором (и не наоборот). чтобы действительно получить желаемый результат, вы должны сделать что-то вроде этого:

$arr1 = array('rabbit','cat','dog');

$arr2 = array('cat','dog','bird');

$diff1 = array_diff($arr1, $arr2);
$diff2 = array_diff($arr2, $arr1);
print_r( array_merge($diff1, $diff2) );

Примечание. Этот метод будет работать только с массивами с цифровыми клавишами.

4 голосов
/ 07 апреля 2011
$diff = array_diff($array1, $array2);

array_diff ()

0 голосов
/ 30 января 2019

Просто чтобы уточнить, когда я изучал этот вопрос, ответы @Jon и @Dallas Caley являются правильными в зависимости от домена ваших массивов.

Если массив с тем, что вы сравниваете, является полнымдомен ваших результатов, тогда будет достаточно простого array_diff согласно @Jon-ответу.

Если массив, с которым вы сравниваете, НЕ является полным доменом ваших результатов, тогда вы должны использовать двойной array_diff согласно @DallasКейли ответ.

0 голосов
/ 26 февраля 2015

Я нашел это docstore.mik.ua / orelly / webprog / pcook / ch04_24.htm весьма полезным.

Возможно, вы захотите использовать обратный дифференциал, изменив порядок массивов в стандартном дифференциале.

...