In PHP werden Array_Diff_Key () und Array_Keys () häufig verwendete Array -Betriebsfunktionen verwendet. Ersteres wird verwendet, um die Differenzen von Arrays zu vergleichen, und letztere wird verwendet, um den Schlüsselnamen des Arrays zu erhalten. In einigen Fällen können wir diese beiden Funktionen gleichzeitig verwenden, um einige komplexe Array -Operationen zu implementieren. Wenn jedoch array_diff_key () und array_keys () zusammen verwendet werden, ist es einfach, einige gemeinsame Fehler zu verursachen. Dieser Artikel analysiert die Gründe im Detail anhand mehrerer gängiger Fehlerbeispiele und liefert Lösungen.
Erstens hilft uns das Verständnis der grundlegenden Verwendung dieser beiden Funktionen besser zu verstehen, wie wir Fehler vermeiden können.
ARRAY_KEYS () Funktion: Gibt ein Array aller Schlüsselnamen im Array zurück.
$array = ["a" => 1, "b" => 2, "c" => 3];
$keys = array_keys($array);
print_r($keys);
// Ausgabe:Array ( [0] => a [1] => b [2] => c )
ARRAY_DIFF_KEY () -Funktion: Wird verwendet, um die Schlüsselnamen von zwei Arrays zu vergleichen und den Differenzenteil zurückzugeben, dh die Schlüsselnamen, die sich im ersten Array befinden, jedoch nicht im zweiten Array.
$array1 = ["a" => 1, "b" => 2, "c" => 3];
$array2 = ["b" => 10, "c" => 20];
$result = array_diff_key($array1, $array2);
print_r($result);
// Ausgabe:Array ( [a] => 1 )
Beim Vergleich der Unterschiede im Schlüsselnamen verwenden viele Entwickler zuerst Array_Keys (), um den Schlüsselnamen des Arrays zu erhalten und zu versuchen, ihn mit den Schlüsselnamen anderer Arrays zu vergleichen, aber häufig treten Fehler auf. Dies liegt daran, dass Array_Keys () ein Array von Schlüsselnamen zurückgibt, nicht die Schlüsselnamen des Originalarrays. Die Verwendung von Array_Diff_key () führt auf diese Weise zu ungenauen Ergebnissen.
$array1 = ["a" => 1, "b" => 2, "c" => 3];
$array2 = ["b" => 10, "c" => 20];
// Der falsche Weg
$keys1 = array_keys($array1);
$result = array_diff_key($keys1, $array2);
print_r($result);
// Ausgabe:Array ( )
Problemanalyse : Das Schlüsselname -Array von Array1 ["A", "B", "C"] wird in $ keys1 und nicht in der Assoziation zwischen dem Schlüsselnamen und dem Wert des ursprünglichen Array Array1 gespeichert. array_diff_key () wird mit Schlüsselnamen verglichen, und zu diesem Zeitpunkt verwendet Array_Diff_key () die Schlüsselnamen in Keys1 zum Vergleich, und das Ergebnis entspricht natürlich nicht den Erwartungen.
Richtiger Weg : Verwenden Sie array_diff_key () direkt, um das ursprüngliche Array zu vergleichen.
// Die richtige Art, es zu tun
$result = array_diff_key($array1, $array2);
print_r($result);
// Ausgabe:Array ( [a] => 1 )
Ein weiterer häufiger Fehler besteht darin, die Differenz zwischen den Schlüsselnamen und den Werten von zwei Arrays gleichzeitig zu berechnen, was anfällig für Verwirrung ist. array_diff_key () vergleichen nur Schlüsseldamen, aber nicht Schlüsselwerte. Wenn Sie also gleichzeitig Schlüssel und Werte vergleichen müssen, erhalten Sie möglicherweise unerwartete Ergebnisse.
$array1 = ["a" => 1, "b" => 2, "c" => 3];
$array2 = ["a" => 10, "b" => 2];
$result = array_diff_key($array1, $array2);
print_r($result);
// Ausgabe:Array ( [c] => 3 )
Problemanalyse : Im obigen Code vergleicht Array_diff_key () nur die Schlüsselnamen, berücksichtigt jedoch nicht den entsprechenden Wert des Schlüssels. In $ array1 sind beide "a" und "b" die gleichen wie die Schlüsselnamen in $ array2 , so dass es keinen Unterschied gibt. Nur wenn sich der Schlüsselname von "C" vom Schlüsselnamen in $ array2 unterscheidet, wird er zurückgegeben.
Lösung : Wenn Sie Schlüsselnamen, aber auch Schlüsselwerte vergleichen möchten, können Sie Array_Diff_assoc () anstelle von array_diff_key () verwenden, die gleichzeitig Schlüsselnamen und -werte vergleichen.
$result = array_diff_assoc($array1, $array2);
print_r($result);
// Ausgabe:Array ( [a] => 1 [c] => 3 )
Verstehen Sie die falsche Verwendung von Funktionen .
Achten Sie nicht auf die Differenz zwischen Schlüssel und Werten : Array_Diff_Key () vergleichen nur die Schlüsselnamen des Array, sondern beinhalten keine Schlüsselwerte. Wenn Sie dies ignorieren, wird von Entwicklern logische Abweichungen verursacht und unnötige Fehler verursacht.
Strukturelle Unterschiede zwischen verschiedenen Arrays : Manchmal ist die Struktur des Arrays komplex und kann mehrdimensionale Arrays enthalten oder verschiedene Tastenarten (z. B. Zeichenfolgen und Zahlen) enthalten. Zu diesem Zeitpunkt sollten Sie darauf achten, geeignete Funktionen und Methoden zu verwenden, um Fehler zu vermeiden.
array_diff_key () und array_keys () sind zwei leistungsstarke Array -Operation -Funktionen, sind jedoch häufig anfällig für Fehler, wenn sie gemeinsam verwendet werden, insbesondere für die Unterscheidung zwischen Array -Schlüsselnamen und Schlüsselwerten. Es ist entscheidend zu verstehen, wie sie funktionieren. Indem wir diese Funktionen korrekt verwenden und vermeiden, ihre Funktionen zu verwechseln, können wir Array -Operationen besser ausführen und häufig auftretende Fehler vermeiden. Wenn Sie nicht nur die Schlüsselnamen, sondern auch die Schlüsselwerte vergleichen möchten, können Sie die Verwendung von array_diff_assoc () verwenden, um unerwartete Ergebnisse zu vermeiden.