Die array_diff-Funktion in PHP
Die Funktion array_diff in PHP vergleicht arrays und gibt Werte zurück, die im ersten array, aber in keinem der anderen vorhanden sind.
Die Funktion array_diff in PHP ist eine eingebaute Funktion, die arrays vergleicht und die Werte zurückgibt, die im ersten array, aber in keinem der anderen vorhanden sind. Sie ist nützlich, wenn Sie die Mengendifferenz zwischen Listen benötigen – beispielsweise beim Vergleich von Datenbankdaten mit Formularwerten oder beim Ermitteln, welche Elemente zwischen zwei Schnappschüssen einer Liste entfernt wurden.
Dieses Kapitel erläutert, wie array_diff funktioniert, die Syntax, den Umgang mit Schlüsseln und Wertvergleichen sowie häufige Fallstricke. Es ist Teil des Themas PHP arrays.
Wie array_diff funktioniert
Die Funktion array_diff vergleicht zwei oder mehr arrays und gibt ein neues array zurück, das die Werte enthält, die im ersten array, aber in keinem der nachfolgenden arrays vorhanden sind. Zwei Punkte sind dabei wesentlich:
- Der Vergleich ist wertbasiert; Schlüssel werden ignoriert. Nur die Werte werden verglichen, jedoch werden die Schlüssel des ersten arrays im Ergebnis beibehalten (sie werden nicht neu indiziert).
- Werte werden als string verglichen. Intern behandelt PHP zwei Elemente als gleich, wenn
(string) $a === (string) $b. Der integer1und der string"1"gelten daher als gleicher Wert.
Syntax
Die Syntax der Funktion array_diff lautet wie folgt:
PHP array_diff-Funktionssyntax
array array_diff (array $array1, array $array2 [, array $... ]);Der Parameter array1 ist das erste array – dasjenige, dessen Werte Sie behalten möchten. Der Parameter array2 (und weitere arrays) sind die arrays, mit denen verglichen wird. Die Funktion gibt die Werte aus array1 zurück, die in keinem der anderen arrays gefunden werden.
Beispiele
Schauen wir uns einige Beispiele an, wie Sie die Funktion array_diff in Ihrem PHP-Code verwenden können.
PHP-Beispiel zur Verwendung der array_diff-Funktion
Dieser Code gibt Folgendes aus:
Array ( [0] => 1 )Wie zu sehen ist, hat die Funktion array_diff den Wert 1 zurückgegeben, der in $array1, aber nicht in $array2 vorhanden ist. Beachten Sie, dass der ursprüngliche Schlüssel (0) aus dem ersten array beibehalten wird.
PHP-Beispiel mit string-Werten (Groß-/Kleinschreibung)
Dieser Code gibt Folgendes aus:
Array ( [1] => Banana )In diesem Beispiel ist der string-Vergleich Groß-/Kleinschreibung-sensitiv. Da 'Banana' nicht exakt mit 'banana' übereinstimmt, wird es als Unterschied zurückgegeben. Der Schlüssel 1 (die ursprüngliche Position von Banana) wird im Ergebnis beibehalten.
Vergleich mit mehreren arrays
Sie können mehr als zwei arrays übergeben. Ein Wert wird nur beibehalten, wenn er in jedem anderen array fehlt:
<?php
$array1 = [1, 2, 3, 4, 5];
$array2 = [2, 4];
$array3 = [5];
$result = array_diff($array1, $array2, $array3);
print_r($result);
?>Ausgabe:
Array ( [0] => 1 [2] => 3 )Die Werte 2 und 4 werden durch $array2 entfernt und 5 durch $array3, sodass 1 und 3 mit ihren ursprünglichen Schlüsseln verbleiben.
Neuindizierung des Ergebnisses
Da die ursprünglichen Schlüssel beibehalten werden, kann das Ergebnis Lücken in den numerischen Schlüsseln aufweisen. Wenn Sie eine sauber sequentiell indizierte Liste benötigen, umschließen Sie den Aufruf mit array_values():
<?php
$result = array_values(array_diff([1, 2, 3], [2]));
print_r($result);
?>Ausgabe:
Array ( [0] => 1 [1] => 3 )Fallstrick: loser, string-basierter Vergleich
Da Elemente als string verglichen werden, können gemischte Typen unerwartet übereinstimmen:
<?php
$result = array_diff(['1', '2', 3], [1, 2]);
print_r($result);
?>Ausgabe:
Array ( [2] => 3 )Hier stimmt '1' mit 1 und '2' mit 2 überein (string-Vergleich), sodass nur 3 übrig bleibt. Objekte und arrays als Werte lösen eine Warnung aus, da sie nicht sauber in einen string umgewandelt werden können.
Verwandte Funktionen
array_diff vergleicht nur Werte. PHP bietet Varianten für unterschiedliche Anforderungen:
array_diff_key()— vergleicht Schlüssel anstelle von Werten.array_diff_assoc()— vergleicht sowohl Schlüssel als auch Werte.array_intersect()— das Gegenteil: gibt Werte zurück, die in allen arrays vorhanden sind.array_merge()— kombiniert arrays, anstatt sie zu subtrahieren.
Fazit
Die Funktion array_diff ist ein nützliches Werkzeug zum Vergleichen von arrays und zum Ermitteln der Unterschiede zwischen ihnen. Ob Sie mit Datenbankdaten arbeiten oder einfach Wertelisten vergleichen – die Funktion array_diff hilft Ihnen, schnell und einfach die Werte zu finden, die nur in einem array vorhanden sind. Durch den Einsatz dieser Funktion in Ihrem PHP-Code können Sie Ihren Entwicklungsprozess optimieren und die benötigten Daten leichter finden und verarbeiten.