In PHP wird die Funktion array_diff_key () verwendet, um zwei oder mehr Arrays zu vergleichen und ein Array zurückzugeben, das die Schlüsselnamen (Schlüsselwertepaare) im ersten Array enthält, jedoch nicht in den anderen Arrays. Bei der Verwendung dieser Funktion müssen Entwickler jedoch den Datentyp des Schlüsselnamens besondere Aufmerksamkeit schenken, da unterschiedliche Datentypen das Verhalten der Funktion beeinflussen können.
Die Syntax der Funktion array_diff_key () lautet wie folgt:
array_diff_key(array $array1, array $array2, array ...$arrays): array
Diese Funktion vergleicht $ array1 mit nachfolgenden Arrays ( $ array2 , $ array3 usw.) und gibt ein neues Array zurück, das Schlüsselnamen enthält, die in $ array1 vorhanden sind, aber in anderen Arrays nicht existieren. Insbesondere wird es durch Vergleich von Schlüsselnamen betrieben.
Beispielcode:
$array1 = ['a' => 'apple', 'b' => 'banana', 10 => 'ten'];
$array2 = ['a' => 'apple', 'c' => 'cherry', 10 => 'ten'];
$result = array_diff_key($array1, $array2);
print_r($result);
Ausgabe:
Array
(
[b] => banana
)
In diesem Beispiel vergleicht die Funktion array_diff_key () $ array1 und $ array2 und gibt das Element zurück, das dem Schlüsselnamen B entspricht, da sie in $ array1, jedoch nicht in $ array2 , vorhanden ist.
Wenn array_diff_key () den Schlüssennamenvergleich durchführt, wird der Datentyp des Schlüsselnamens berücksichtigt. Dies bedeutet, dass PHP sie als unterschiedliche Schlüssel behandelt, wenn die Schlüsselnamen der beiden Arrays visuell ähnlich sind, aber unterschiedliche Datentypen aufweisen. Diese Funktion veranlasst Entwickler häufig, auf schwierige Probleme zu stoßen, wenn sie versehentlich sind.
$array1 = ['10' => 'value1'];
$array2 = [10 => 'value2'];
$result = array_diff_key($array1, $array2);
print_r($result);
Ausgabe:
Array
(
[10] => value1
)
Obwohl sowohl Array1 als auch Array2 in diesem Beispiel einen Schlüsselwert 10 haben, ist Key 10 in $ array1 eine Zeichenfolge und in $ array2 ist Key 10 eine Ganzzahl. In PHP werden die Zeichenfolge '10' und die Ganzzahl 10 als unterschiedliche Schlüsselnamen behandelt. Infolgedessen glaubt Array_diff_key () , dass sie nicht übereinstimmen, also gibt es Key 10 in $ array1 zurück.
$array1 = ['10' => 'apple', 10 => 'orange'];
$array2 = [10 => 'banana'];
$result = array_diff_key($array1, $array2);
print_r($result);
Ausgabe:
Array
(
[10] => apple
)
Obwohl es in Array1 , '10' (String -Typ) und 10 (Integral -Typ) zwei Schlüssel gibt, behandelt Array_diff_key () sie aufgrund unterschiedlicher Datentypen von Schlüsselnamen als zwei verschiedene Schlüssel. Selbst wenn 10 in $ Array2 , '10' und 10 noch als unterschiedliche Schlüssel verarbeitet werden, enthält das zurückgegebene Ergebnis immer noch die Elemente, die 10 entsprechen.
Wenn Sie Keynames mit einem Array vergleichen, wird der Datentyp des Keynamens möglicherweise nicht immer explizit konvertiert. Unterschiedliche Datentypen können dazu führen, dass anscheinend die gleichen Schlüsselnamen fälschlicherweise als unterschiedliche Schlüssel verarbeitet werden, wodurch Array_Diff_key () nicht wie erwartet funktioniert. Diese Situation ist besonders beim Vergleich von Arrays mit gemischten Typen deutlich.
Angenommen, Sie möchten zwei Arrays mit URLs als Schlüssel in einer Funktion vergleichen. Wenn diese URLs unterschiedliche Typen als Schlüsselnamen haben, können Probleme verursacht werden:
$array1 = ['http://m66.net/page1' => 'content1'];
$array2 = ['http://m66.net/page1' => 'content2'];
$result = array_diff_key($array1, $array2);
print_r($result);
Ausgabe:
Array
(
[http://m66.net/page1] => content1
)
Obwohl die Schlüssel der beiden Arrays genau gleich erscheinen, können die Ergebnisse beeinträchtigt werden, wenn die URL an anderer Stelle unterschiedlich verarbeitet wird (z. B. die Verwendung verschiedener Zitattypen oder eine Konvertierung von irgendeiner Art).
Um potenzielle Probleme zu vermeiden, die durch Schlüsseldamentypen verursacht werden, können folgende Maßnahmen ergriffen werden:
Einheitlicher Schlüsselname Datentyp : Stellen Sie beim Erstellen eines Arrays sicher, dass der Datentyp des Schlüsselnamens konsistent ist. Versuchen Sie beispielsweise, Zeichenfolgen oder Ganzzahlen als Schlüssel zu Arrays so einheitlich zu verwenden.
Verwenden Sie Casting : Verwenden Sie vor dem Vergleich des Schlüsselnamens Funktionen wie Strval () oder intval (), um sicherzustellen, dass die Datentypen der Schlüsselnamen konsistent sind.
$array1 = [strval(10) => 'value1'];
$array2 = [10 => 'value2'];
$result = array_diff_key($array1, $array2);
print_r($result);
Vermeiden Sie durch die Vereinigung des Datentyps des Schlüsselnamens Fehler, die durch verschiedene Typen verursacht werden.
Die Funktion array_diff_key () wird durch verschiedene Datentypen für Schlüsselname beeinflusst, sodass bei der Verwendung dieser Funktion besondere Aufmerksamkeit erforderlich ist. Wenn die Schlüsselnamen -Arrays -Arrays inkonsistent sind, behandelt PHP sie als unterschiedliche Schlüssel, auch wenn sie visuell gleich sind. Dies kann schwer zu entdeckende Probleme verursachen, insbesondere wenn Sie mit Arrays mit URLs oder anderen dynamisch generierten Schlüsselnamen befassen. Um diese Probleme zu vermeiden, wird empfohlen, die Datentypen von Schlüsselnamen zu vereinheitlichen oder die Konvertierung vor der Durchführung von Vergleiche von Schlüsselnamen einzugeben.
Das obige ist eine detaillierte Erläuterung des Problems des Schlüsselnamens Datentyp bei der Verwendung der Funktion array_diff_key () . Ich hoffe, dieser Artikel hilft Ihnen, die Funktion array_diff_key () besser zu verstehen und zu verwenden.