In der täglichen Entwicklung von PHP wird die Funktion array_diff () häufig verwendet, um Differentialoperationen in Arrays durchzuführen. Es kann uns helfen, Werte zu finden, die in einem Array existieren, jedoch nicht in anderen Arrays. Dies ist sehr praktisch für die Handhabung von Szenarien wie Datenfilterung und Berechtigungskontrolle.
Eine oft übersehene Frage lautet jedoch: Wird Array_diff () bei der Rückgabe des Ergebniss den Schlüsselnamen des ursprünglichen Arrays beibehalten? Oder wird es das Array automatisch wieder integrieren?
Schauen wir uns ein einfaches Beispiel an:
<?php
$array1 = ["a" => "green", "b" => "brown", "c" => "blue", "red"];
$array2 = ["green", "yellow", "red"];
$result = array_diff($array1, $array2);
print_r($result);
?>
Das Ausgangsergebnis ist:
Array
(
[b] => brown
[c] => blue
)
Wie Sie sehen können, behält das von Array_Diff () zurückgegebene Ergebnis den Schlüsselnamen des ursprünglichen Array $ arrray1 bei . Sogar der String -Schlüssel ist nicht wieder integriert.
Wenn Sie das Ergebnisarray wirklich wieder indexieren möchten, können Sie Array_Values () manuell verwenden:
$reindexed = array_values(array_diff($array1, $array2));
print_r($reindexed);
Ausgabe:
Array
(
[0] => brown
[1] => blue
)
In diesem Fall wird der Schlüsselname auf einen kontinuierlichen Zahlenindex ab 0 zurückgesetzt.
Nehmen wir an, der Benutzer reicht eine Reihe von Tags ein und Sie möchten den Inhalt, der bereits im System Standard -Tag vorliegt, entfernen:
<?php
$userTags = [
10 => "php",
11 => "html",
12 => "custom"
];
$defaultTags = ["php", "html", "css", "javascript"];
$finalTags = array_diff($userTags, $defaultTags);
print_r($finalTags);
?>
Ausgangsergebnis:
Array
(
[12] => custom
)
Dies zeigt, dass die Funktion die Schlüsselnamen des ursprünglichen Arrays des Benutzers beibehält, was wertvolle Informationen in der Datenbankeinfügung oder in der Aktualisierung von Vorgängen sein kann.
Array_Diff () vergleicht nur Werte , unabhängig von Schlüsselnamen.
Wenn Sie basierend auf Schlüsselnamen vergleichen möchten, können Sie array_diff_key () verwenden.
Wenn Sie gleichzeitig Schlüsselnamen und -werte vergleichen möchten, können Sie Array_Diff_assoc () verwenden.