array_diff_assoc () ist eine sehr praktische Funktion in PHP. Es wird verwendet, um Schlüsselwertpaare von zwei Arrays zu vergleichen und einen anderen Teil des ersten Arrays zurückzugeben als das zweite Array. Obwohl diese Funktion sehr intuitiv ist, tendieren Entwickler dazu, ihr Verhalten während der Verwendung falsch zu verstehen. Heute werden wir mehrere gängige Fallstricke und Missverständnisse in Array_Diff_assoc () untersuchen, um Ihnen zu helfen, besser zu verstehen, wie es funktioniert.
array_diff_assoc () vergleicht nicht nur die Werte im Array, sondern auch die Schlüssel im Array. Daher werden zwei Arrays als "unterschiedlich" angesehen, auch wenn die Werte gleich sind, solange die Schlüssel unterschiedlich sind. Dies unterscheidet sich vom Verhalten der Funktion array_diff () , die nur Werte vergleicht und sich nicht um Tasten kümmert.
$array1 = [
0 => 'apple',
1 => 'banana'
];
$array2 = [
1 => 'banana',
0 => 'apple'
];
$result = array_diff_assoc($array1, $array2);
print_r($result);
Ausgabe:
Array
(
[0] => apple
)
erklären:
Obwohl die Werte in $ array1 und $ array2 gleich sind, ist Array_Diff_assoc () der Meinung, dass sie aufgrund ihrer unterschiedlichen Schlüssel unterschiedlich sind.
Array_diff_assoc () vergleicht die Werte und Schlüssel des Arrays streng, was bedeutet, dass es nicht nur die Typen überprüft, sondern auch prüft, ob die Arten der Werte übereinstimmen. Das heißt, die Nummer 1 und die String '1' werden als unterschiedlich angesehen.
$array1 = [
'a' => 1,
'b' => '2'
];
$array2 = [
'a' => '1',
'b' => 2
];
$result = array_diff_assoc($array1, $array2);
print_r($result);
Ausgabe:
Array
(
[a] => 1
[b] => '2'
)
erklären:
array_diff_assoc () behandelt die Nummer 1 und die Zeichenfolge '1' als unterschiedliche Werte. In ähnlicher Weise werden auch '2' und 2 als unterschiedlich angesehen. Dieser strenge Vergleich lässt uns mehr auf die Art der Daten achten und unerwartete Ergebnisse vermeiden.
Wenn der erste Parameter von array_diff_assoc () ein leeres Array ist, gibt es das leere Array direkt zurück. Dieses Verhalten ist vernünftig, aber einige Entwickler können falsch verstehen, dass ein leeres Array zum ursprünglichen Array zurückkehrt. Tatsächlich gibt Array_Diff_assoc () nicht leere Differentialergebnisse zurück, wenn beide Arrays Inhalte haben und es Unterschiede gibt.
$array1 = [];
$array2 = [1 => 'apple', 2 => 'banana'];
$result = array_diff_assoc($array1, $array2);
print_r($result);
Ausgabe:
Array
()
erklären:
Da $ Array1 leer ist, gibt Array_Diff_assoc () ein leeres Array zurück, das angibt, dass es keinen Unterschied gibt. Dies kann dazu führen, dass einige Entwickler fälschlicherweise glauben, dass etwas mit der Funktion nicht stimmt.
Array_diff_assoc () vergleicht nur Schlüsselwertpaare von eindimensionalen Arrays. Wenn ein Array verschachtelte Arrays enthält, vergleicht Array_diff_assoc () keine Schlüsselwertpaare dieser verschachtelten Arrays.
$array1 = [
'a' => ['apple', 'orange'],
'b' => 'banana'
];
$array2 = [
'a' => ['apple', 'orange'],
'b' => 'banana'
];
$result = array_diff_assoc($array1, $array2);
print_r($result);
Ausgabe:
Array
()
erklären:
Auch wenn die Werte in Array1 und Array2 verschachtelte Arrays enthalten, betrachtet Array_Diff_assoc () diese beiden Arrays immer noch gleich, da sie den Inhalt des verschachtelten Arrays nicht rekursiv vergleicht. Wenn Sie verschachtelte Arrays vergleichen müssen, müssen Sie möglicherweise andere Methoden oder rekursive Funktionen verwenden.
Das von array_diff_assoc () zurückgegebene Array enthält nur Schlüsselwertpaare, die sich vom ersten Array unterscheiden. Wenn es keinen Unterschied gibt, gibt die Funktion ein leeres Array zurück. Viele Entwickler ignorieren dies, wenn sie es verwenden, und veranlasst sie, die Rückkehrergebnisse falsch zu verstehen.
$array1 = [1, 2, 3];
$array2 = [1, 2];
$result = array_diff_assoc($array1, $array2);
print_r($result);
Ausgabe:
Array
(
[2] => 3
)
erklären:
In diesem Beispiel gibt Array_Diff_assoc () ein Array -Element mit einem Taste von 2 und einem Wert von 3 zurück, was angibt, dass es in $ array1 vorhanden ist und in $ array2 nicht existiert.