In PHP wird die Funktion array_diff () häufig verwendet, um zwei oder mehr Arrays zu vergleichen und ein Array zurückzugeben, das Elemente enthält, die im ersten Array, jedoch nicht in anderen Arrays, vorhanden sind. Diese Funktion ist sehr häufig und praktisch, aber Sie können bei der Verwendung von Schwierigkeiten auftreten, insbesondere beim Umgang mit numerischen Indexarrays.
Die Funktion array_diff () nimmt zwei oder mehr Arrays als Parameter an, vergleicht die Elemente dieser Arrays und gibt ein Array zurück, das Werte enthält, die im ersten Array existieren und in den anderen Arrays nicht existieren. Zum Beispiel:
$array1 = [1, 2, 3, 4];
$array2 = [2, 3];
$result = array_diff($array1, $array2);
print_r($result);
Ausgabe:
Array
(
[0] => 1
[3] => 4
)
Im obigen Beispiel gibt Array_DIFF () Elemente zurück, die im Array $ Array1 vorhanden sind, jedoch nicht in $ Array2 - 1 und 4.
Wenn Sie jedoch Array_Diff () in einem numerischen Index -Array verwenden, können Sie manchmal auf unerwartetes Verhalten stoßen, insbesondere wenn die Elemente im Array Duplikate haben oder wenn sich das Ergebnis von dem tatsächlichen Ergebnis unterscheidet.
Array_Diff () vergleichen nicht nur die Werte des Arrays, sondern auch die Schlüssel im Array. Dies bedeutet, dass das zurückgegebene Array die Schlüssel vom ersten Array anstatt neu zu ordnen.
Zum Beispiel:
$array1 = [1, 2, 3, 4];
$array2 = [2, 3];
$result = array_diff($array1, $array2);
print_r($result);
Ausgabe:
Array
(
[0] => 1
[3] => 4
)
Beachten Sie, dass, obwohl die Elemente 1 und 4 in Array1 in Array2 nicht erscheinen, das zurückgegebene Ergebnis ihre ursprünglichen Schlüsselwerte ( 0 und 3 ) behält. Dieses Verhalten stört Sie möglicherweise, wenn Sie erwarten, dass das zurückgegebene Array in Ordnung ist.
Manchmal kann der numerische Index im Array dazu führen, dass das Ergebnis mit den Erwartungen nicht stimmt. Wenn Sie beispielsweise die Datenverarbeitung durchführen, kann das Verhalten von Array_Diff () , um den ursprünglichen Index beizubehalten, Ihre Logik zerstören. Zum Beispiel:
$array1 = [10, 20, 30, 40];
$array2 = [20, 30];
$result = array_diff($array1, $array2);
print_r($result);
Ausgabe:
Array
(
[0] => 10
[3] => 40
)
Obwohl nur 10 und 40 im zurückgegebenen Array übrig sind, behalten sie den ursprünglichen Index. Wenn Sie mit den Ergebnissen arbeiten müssen, können einige Probleme aufgrund falscher Indizes auftreten.
Um das Problem zu lösen, das Array_DIFF () nicht wieder in der Lage ist, können Sie die Funktion array_values () verwenden, um das Ergebnisarray nach dem Vergleich wieder zu forxen:
$array1 = [10, 20, 30, 40];
$array2 = [20, 30];
$result = array_diff($array1, $array2);
$result = array_values($result);
print_r($result);
Ausgabe:
Array
(
[0] => 10
[1] => 40
)
Mit Array_Values () können Sie sicherstellen, dass das zurückgegebene Array in der Reihenfolge wieder in Ordnung ist, ohne den Index vom ursprünglichen Array auszuhalten.
Schlüsselreservierung : Array_Diff () behält den Schlüsselwert des ursprünglichen Arrays bei, wodurch sich der Index des Ergebnisarrays von den Erwartungen unterscheidet.
Vergleich der Array -Werte : Array_Diff () vergleicht Arrays basierend auf Werten. Wenn es im Array jedoch doppelte Elemente gibt, kann dies das Endergebnis beeinflussen.
REINDEX : Wenn Sie das Array in der Reihenfolge wieder aufnehmen müssen, können Sie Array_Values () verwenden, um Index -Missverhältnisse zu vermeiden.
array_diff () ist eine sehr leistungsstarke Funktion, aber bei Verwendung numerischer Indexarrays achten Sie auf das Verhalten, Schlüsselwerte beizubehalten. In einigen Fällen müssen Sie möglicherweise die Ergebnisse wie die Wiederherstellung des Arrays weiter verarbeiten, um die gewünschten Ergebnisse zu erzielen.
Durch das Verständnis des Verhaltens der Funktion array_diff () , insbesondere wie sie die Schlüssel und Werte des Arrays umgeht, können Sie diese "Fallen" besser vermeiden und diese Funktion effizient verwenden.