Gegenteil von array_intersect?

Lesezeit: 2 Minuten

Benutzer-Avatar
Itay Moav-Malimovka

Gibt es eine integrierte Funktion, um alle Mitglieder von Array 1 abzurufen, die in Array 2 nicht vorhanden sind?
Ich weiß, wie man das programmgesteuert macht, und frage mich nur, ob es eine eingebaute Funktion gibt, die dasselbe tut. Also bitte keine Codebeispiele.

  • Bitte beachten Sie, dass Sie, wenn Sie nach Funktionen mit ähnlichem Verhalten suchen, diese höchstwahrscheinlich auf der Handbuchseite für diese Funktion im Abschnitt “Siehe auch” finden, wie Sie es mit dieser Frage tun können php.net/manual/en/function.array-intersect.php

    – Anständiger Dabbler

    7. April 2011 um 14:05 Uhr

Das klingt nach einem Job für array_diff.

Gibt ein Array zurück, das alle Einträge aus array1 enthält, die in keinem der anderen Arrays vorhanden sind.

Benutzer-Avatar
Dallas Caley

array_diff ist definitiv die offensichtliche Wahl, aber es ist technisch gesehen nicht das Gegenteil von array_interesect. Nehmen Sie dieses Beispiel:

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

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

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

Was Sie wollen, ist ein Ergebnis mit ‘Kaninchen’ und ‘Vogel’ darin, aber was Sie bekommen, ist nur Kaninchen, weil es nach dem sucht, was im ersten Array steht, aber nicht im zweiten (und nicht umgekehrt). Um wirklich das gewünschte Ergebnis zu erzielen, müssen Sie Folgendes tun:

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

Hinweis: Diese Methode funktioniert nur bei Arrays mit numerischen Schlüsseln.

  • danke, das habe ich gesucht, das sollte als Lösung markiert sein

    – artSir

    6. Mai 2016 um 18:08 Uhr

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

array_diff()

Nur um zu verdeutlichen, dass bei der Untersuchung dieser Frage die Antworten von @Jon und @Dallas Caley beide korrekt sind, abhängig von der Domäne Ihrer Arrays.

Wenn das Array mit dem, was Sie vergleichen, die vollständige Domäne Ihrer Ergebnisse ist, reicht ein einfaches array_diff gemäß der @Jon-Antwort aus.

Wenn das Array mit dem, was Sie vergleichen, NICHT die vollständige Domäne Ihrer Ergebnisse ist, sollten Sie sich für das doppelte array_diff gemäß der Antwort von @Dallas Caley entscheiden.

Benutzer-Avatar
Jesse

ich habe das gefunden docstore.mik.ua/orelly/webprog/pcook/ch04_24.htm Ziemlich nützlich.

Möglicherweise möchten Sie ein umgekehrtes Diff, indem Sie die Reihenfolge der Arrays in einem Standard-Diff umkehren.

1335580cookie-checkGegenteil von array_intersect?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy