Die Funktion array_diff_assoc () in PHP wird verwendet, um zwei Arrays zu vergleichen und ein Array zurückzugeben, das alle Elemente im ersten Array enthält, jedoch nicht im zweiten Array. Während des Vergleichsprozesses wird nicht nur der Wert des Elements berücksichtigt, sondern auch der Schlüssel des Elements wird berücksichtigt. Manchmal können Sie jedoch auf Situationen stoßen, in denen Array_Diff_assoc () die Ausgabe inkonsistent ist. In diesem Artikel wird untersucht, wie dieses Problem gelöst werden kann.
Die grundlegende Verwendung der Funktion array_diff_assoc () lautet wie folgt:
$array1 = array("a" => "apple", "b" => "banana", "c" => "cherry");
$array2 = array("a" => "apple", "b" => "banana");
$result = array_diff_assoc($array1, $array2);
print_r($result);
In diesem Beispiel wird $ result ausgegeben:
Array
(
[c] => cherry
)
Dies liegt daran, dass die Schlüsselwertpaare "A" => "Apple" und "B" => "Banane" in beiden Arrays existieren, sodass sie ausgeschlossen sind. Alles, was übrig bleibt, ist der Schlüssel "C" und der entsprechende Wert "Kirsche" .
Obwohl Array_diff_assoc () ein sehr bequemes Werkzeug ist, stimmt seine Ausgabe in einigen Fällen möglicherweise nicht mit dem überein, was Sie erwarten. Das Problem tritt normalerweise in den folgenden Situationen auf:
Array_Diff_assoc () vergleicht nicht nur die Werte, sondern auch die Datentypen der Schlüssel beim Vergleich von Arrays. Wenn die Datentypen von Schlüssel oder Werten eines Elements in zwei Arrays unterschiedlich sind, betrachtet Array_diff_assoc () sie als ungleich.
$array1 = array("a" => "1");
$array2 = array("a" => 1);
$result = array_diff_assoc($array1, $array2);
print_r($result);
Obwohl die Werte "1" und 1 gleich aussehen, werden sie aufgrund der verschiedenen Datentypen gleich aussehen .
Array
(
[a] => 1
)
Obwohl Array_Diff_assoc () Schlüssel und Werte für Schlüsselwertpaare vergleicht, kümmert sich die Reihenfolge der Schlüssel nicht. Selbst wenn die Reihenfolge der Schlüsselwertpaare in den beiden Arrays unterschiedlich ist, sind die Ergebnisse möglicherweise nicht wie erwartet.
In einigen Anwendungsszenarien sind Sie möglicherweise an URL -Vergleiche beteiligt. Wenn der Domänenname Teil der URL unterschiedlich ist, kann Array_Diff_assoc () auch inkonsistent ausgeben. Zum Beispiel:
$array1 = array("url" => "http://example.com/page1");
$array2 = array("url" => "http://m66.net/page1");
$result = array_diff_assoc($array1, $array2);
print_r($result);
In diesem Fall berücksichtigt Array_Diff_assoc () die "URL" -Werte der beiden Arrays, um ein inkonsistentes Ergebnis zurückzugeben.
Stellen Sie sicher, dass die Datentypen konsistent sind : Stellen Sie vor dem Vergleich sicher, dass die Datentypen von Schlüssel und Werten in den beiden Arrays konsistent sind. Bei Bedarf können Sie Funktionen wie Intval () , Strval () oder FloatVal () verwenden, um die Datentypen zu vereinen.
Manuell Vergleichs -URLs : Für URL -Vergleichsprobleme können Sie den Domänennamenteil in der URL durch denselben Domänennamen ersetzen, bevor Sie einen Vergleich vornehmen. Unter der Annahme, dass alle URLs M66.net als Domänennamen verwenden möchten, können Sie die folgende Methode verwenden: