web-dev-qa-db-fra.com

En face de array_intersect?

Existe-t-il une fonction intégrée pour obtenir tous les membres du tableau 1 qui n'existent pas dans le tableau 2?
Je sais comment le faire par programmation, me demandant seulement s'il existe une fonction intégrée qui fait la même chose. Donc, s'il vous plaît, pas d'exemples de code.

37

Cela ressemble à un travail pour array_diff .

Retourne un tableau contenant tous les les entrées de array1 qui ne sont pas présent dans l'un des autres tableaux.

60
Jon

array_diff est définitivement le choix évident, mais ce n’est pas techniquement le contraire de array interesect. Prenons cet exemple:

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

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

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

Ce que vous voulez, c'est un résultat avec «lapin» et «oiseau», mais vous obtenez uniquement un lapin car il recherche ce qui se trouve dans le premier tableau mais pas dans le second (et non l'inverse). pour vraiment obtenir le résultat souhaité, vous devez faire quelque chose comme ceci:

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

Remarque: cette méthode ne fonctionnera que sur des tableaux avec des touches numériques.

34
Dallas Caley
$diff = array_diff($array1, $array2);

array_diff ()

4
KingCrunch

J'ai trouvé ceci docstore.mik.ua/orelly/webprog/pcook/ch04_24.htm assez utile.

Vous voudrez peut-être un diff inverse, en inversant l'ordre des tableaux dans un diff standard.

0
Jesse

Juste pour clarifier, alors que je cherchais dans cette question, les réponses de @Jon et @Dallas Caley sont correctes en fonction du domaine de vos tableaux.

Si le tableau par rapport à ce que vous comparez est le domaine complet de vos résultats, un simple array_diff suffira selon @Jon answer.

Si le tableau par rapport à ce que vous comparez N'EST PAS le domaine complet de vos résultats, vous devez utiliser le double array_diff conformément à la réponse de @Dallas Caley.

0
Khel_MVA