Подтвердить что ты не робот

Напротив array_intersect?

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

4b9b3361

Ответ 1

Это похоже на работу для array_diff.

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

Ответ 2

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) );

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

Ответ 3

$diff = array_diff($array1, $array2);

array_diff()

Ответ 4

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

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

Ответ 5

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

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

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