In PHP ist Array_diff_assoc () eine sehr nützliche Funktion, die zwei Arrays vergleicht, alle Elemente im ersten Array zurückgibt, die sich nicht im zweiten Array befinden, wodurch die Konsistenz zwischen dem Schlüsselnamen und dem Schlüsselwert erhalten bleibt. Manchmal stellen Sie jedoch möglicherweise fest, dass das Ergebnis nicht das ist, was Sie bei der Verwendung von array_diff_assoc () erwartet haben. In diesem Artikel wird die häufigen Ursachen dieses Problems erläutert und Ihnen helfen, das Problem zu diagnostizieren und zu beheben.
Die Funktion von array_diff_assoc () besteht darin, die Schlüssel und Werte von zwei Arrays zu vergleichen und Elemente im ersten Array zurückzugeben, die sich vom zweiten Array unterscheiden. Sein Funktionsprototyp ist wie folgt:
array_diff_assoc(array $array1, array $array2): array
Diese Funktion wird $ arrray1 und $ array2 vergleichen, und wenn sich der Schlüssel und der Wert der Elemente in $ array1 von $ array2 unterscheiden, werden diese Elemente zurückgegeben.
$array1 = [
"a" => "apple",
"b" => "banana",
"c" => "cherry"
];
$array2 = [
"a" => "apple",
"b" => "berry",
"d" => "date"
];
$result = array_diff_assoc($array1, $array2);
print_r($result);
Ausgangsergebnis:
Array
(
[b] => banana
[c] => cherry
)
In diesem Beispiel gibt Array_Diff_assoc () Elemente in $ array1 mit den Schlüssel B und C zurück, und die Werte unterscheiden sich von denen in $ array2 .
Unterschiedliche Schlüssel und Werte des Arrays führen dazu, dass das Ergebnis die Erwartungen nicht erfüllt
array_diff_assoc () vergleicht nicht nur die Werte eines Arrays, sondern vergleicht auch die Schlüssel. Wenn die Schlüssel der beiden Arrays genau gleich sind, die Werte jedoch unterschiedlich sind, werden diese Elemente immer noch als unterschiedlich angesehen. Wenn Sie sich also nur um die Differenz der Werte kümmern, müssen Sie möglicherweise die Funktion array_diff () verwenden, die die Werte nur vergleicht und sich nicht um die Schlüssel kümmert.
Zum Beispiel:
$array1 = ["a" => "apple", "b" => "banana"];
$array2 = ["a" => "apple", "b" => "berry"];
$result = array_diff_assoc($array1, $array2);
print_r($result);
Ausgangsergebnis:
Array
(
[b] => banana
)
Sie können sehen, dass der Wert von B zwar unterschiedlich ist, es jedoch aufgrund desselben Schlüsselnamens als ein anderes Element behandelt wird.
Array enthält verschachtelte Arrays oder Objekte <br> Wenn Sie array_diff_assoc () verwenden, das Array enthält verschachtelte Arrays oder Objekte, führt die Funktion rekursive Vergleiche durch. Wenn diese verschachtelten Elemente nicht korrekt verarbeitet werden oder nicht wie erwartet verglichen werden, können Sie auf unerwartete Ergebnisse stoßen. In diesem Fall ist es sehr wichtig, die Struktur verschachtelter Arrays oder Objekte zu debuggen.
Verschiedene Arten von Elementen
PHP ist eine locker getippte Sprache, daher können Elemente in einem Array unterschiedliche Typen haben. array_diff_assoc () vergleicht Werte und Typen, nicht nur Werte. Wenn die Elemente derselben Position in zwei Arrays unterschiedlich sind, betrachtet die Funktion sie anders, wenn ihre Werte gleich aussehen.
Zum Beispiel:
$array1 = [1 => "10", 2 => "20"];
$array2 = [1 => 10, 2 => 20];
$result = array_diff_assoc($array1, $array2);
print_r($result);
Ausgangsergebnis:
Array
(
[1] => 10
[2] => 20
)
"10" und 10 sind hier anders, einer ist eine Zeichenfolge und der andere ist eine Ganzzahl, also glaubt Array_diff_assoc () , dass sie nicht dasselbe sind.
Die Reihenfolge der Elemente in einem Array <br> Obwohl Array_Diff_assoc () nicht nur Werte vergleicht, sondern auch Schlüssebürme enthält, berücksichtigt dies die Reihenfolge des Arrays. Wenn Sie zwei Arrays an array_diff_assoc () übergeben, obwohl ihr Inhalt gleich ist, aber in unterschiedlicher Reihenfolge, werden sie dennoch als verschiedene Arrays angesehen.
$array1 = [1 => "apple", 2 => "banana"];
$array2 = [2 => "banana", 1 => "apple"];
$result = array_diff_assoc($array1, $array2);
print_r($result);
Ausgangsergebnis:
Array
(
[1] => apple
[2] => banana
)
Aufgrund der unterschiedlichen Reihenfolge der Arrays gibt das Ergebnis alle Elemente von Array1 zurück.
Die Schlüssel des Arrays beginnen nicht mit 0 <br> In einigen Fällen beginnen die Schlüssel des Arrays möglicherweise nicht bei 0, was auch das Ergebnis von Array_Diff_assoc () beeinflusst. Stellen Sie sicher, dass Sie verstehen, was die Schlüssel des Arrays sind und ob Sie absichtlich diskontinuierliche Schlüssel verwenden.
Wenn Sie sich nicht für die Schlüssel des Arrays interessieren oder nur Werte vergleichen müssen, ohne die Unterschiede in den Schlüssel zu berücksichtigen, wird empfohlen , Array_Diff () zu verwenden.
Stellen Sie sicher, dass die Werte und Schlüsseltypen des Arrays konsistent sind und vermeiden Sie Fehlanpassungen von Typen.
Wenn im Array verschachtelte Arrays oder Objekte vorhanden sind, prüfen Sie, ob sie wie erwartet verglichen werden, oder debuggen in rekursiver Weise.
array_diff_assoc () ist eine leistungsstarke Funktion, aber seine Vergleichslogik basiert auf der strengen Übereinstimmung von Schlüssel und Werten. Wenn Sie bei der Verwendung nicht die erwarteten Ergebnisse erzielen, ist dies normalerweise auf Unterschiede in Schlüssel, Werten oder Reihenfolge des Arrays zurückzuführen. Zu verstehen, wie diese Funktion funktioniert, und sicherzustellen, dass die Schlüssel und Werte des Arrays mit den Erwartungen übereinstimmen, kann die meisten häufigsten Probleme vermeiden.