In PHP wird die Funktion array_diff_assoc () verwendet, um die Unterschiede zwischen zwei oder mehr Arrays zu vergleichen, Elemente im ersten Array zurückzugeben, die sich nicht in anderen Arrays befinden, und die Schlüsselnamen und -werte zu vergleichen. Dies ist eine sehr bequeme Funktion, insbesondere zum Vergleich von eindimensionalen Arrays.
Die Dinge werden jedoch etwas komplizierter, wenn wir es auf mehrdimensionale Arrays anwenden. In diesem Artikel wird die Anwendung von Array_Diff_assoc () in mehrdimensionalen Arrays untersucht und einige Vorschläge zur Umgehen mit komplexen Situationen abgeben.
Die Funktion array_diff_assoc () wird verwendet, um die Schlüsselnamen und Schlüsselwerte von zwei Arrays zu vergleichen. Wenn im ersten Array ein Schlüsselname und Wert vorhanden sind, aber im anderen Array nicht vorhanden ist, oder es ist anders, wird das Element zurückgegeben.
Grammatik:
array_diff_assoc(array $array1, array $array2, array ...$arrays): array
Array1 : Das erste Array.
Array2 : Das zweite Array, das mehrere Arrays vergleichen kann.
Gibt ein Array mit Differenzen zurück.
$array1 = [
"a" => "apple",
"b" => "banana",
"c" => "cherry"
];
$array2 = [
"a" => "apple",
"b" => "blueberry",
"d" => "date"
];
$result = array_diff_assoc($array1, $array2);
print_r($result);
Ausgabe:
Array
(
[b] => banana
[c] => cherry
)
Wenn wir array_diff_assoc () verwenden, um mehrdimensionale Arrays zu vergleichen, wird das Problem komplizierter, da diese Funktion nur die Schlüssel und Werte des obersten Arrays vergleicht und den Inhalt des mehrdimensionalen Arrays nicht tief vergleichen kann.
Angenommen, wir haben zwei mehrdimensionale Arrays und wollen ihre Unterschiede vergleichen:
$array1 = [
"fruit" => [
"apple" => 3,
"banana" => 2,
],
"vegetable" => [
"carrot" => 5,
"cucumber" => 7
]
];
$array2 = [
"fruit" => [
"apple" => 3,
"banana" => 3,
],
"vegetable" => [
"carrot" => 5,
"cucumber" => 8
]
];
$result = array_diff_assoc($array1, $array2);
print_r($result);
Ausgabe:
Array
(
[fruit] => Array
(
[banana] => 2
)
[vegetable] => Array
(
[cucumber] => 7
)
)
Wie oben gezeigt, kann Array_diff_assoc () nur die Struktur der obersten Ebene eines Arrays vergleichen und verschachtelte Elemente in mehrdimensionalen Arrays nicht tief vergleichen.
Für mehrdimensionale Arrays müssen wir die Vergleichsfunktion anpassen, um die Unterschiede jedes Elements rekursiv zu vergleichen. Wir können komplexe Situationen bewältigen, indem wir array_diff_assoc () rekursiv oder in Kombination mit anderen Funktionen aufrufen.
Wir können eine rekursive Funktion schreiben, die die Vergleiche mehrdimensionaler Arrays manuell behandelt. Hier ist ein Beispiel für den Umgang mit Unterschieden in mehrdimensionalen Arrays:
function array_diff_assoc_recursive($array1, $array2) {
$diff = [];
foreach ($array1 as $key => $value) {
// Wenn das Element ein Array ist,Rufen Sie dann rekursiv an
if (is_array($value)) {
$diff[$key] = array_diff_assoc_recursive($value, $array2[$key] ?? []);
} else {
// Wenn der Wert unterschiedlich ist,Dann fügen Sie es dem Differenzarray hinzu
if (!isset($array2[$key]) || $array2[$key] !== $value) {
$diff[$key] = $value;
}
}
}
return $diff;
}
$result = array_diff_assoc_recursive($array1, $array2);
print_r($result);
Ausgabe:
Array
(
[fruit] => Array
(
[banana] => 2
)
[vegetable] => Array
(
[cucumber] => 7
)
)
Mit diesem Ansatz können wir wichtige Werte von mehrdimensionalen Arrays rekursiv vergleichen und genaue Unterschiede erhalten.
Obwohl Array_Diff_assoc () eine sehr nützliche Funktion ist, hat es bestimmte Einschränkungen beim Umgang mit mehrdimensionalen Arrays. Um die Unterschiede zwischen mehrdimensionalen Arrays zu vergleichen, müssen wir durch Rekursion genauere Vergleiche erreichen. In komplexen Anwendungsszenarien ist das Schreiben von benutzerdefinierten rekursiven Vergleichsfunktionen der beste Weg, um mit Unterschieden in mehrdimensionalen Arrays umzugehen.