In PHP ist Array_Diff_Uassoc () eine Funktion, mit der die Unterschiede in den Schlüsselnamen und Schlüsselwerten von zwei oder mehr Arrays verglichen werden. Es vergleicht nicht nur die Werte des Arrays, sondern auch die Schlüssel des Arrays basierend auf benutzerdefinierten Rückruffunktionen. Im Umgang mit einzeldimensionalen Arrays ist Array_Diff_Uassoc () relativ einfach zu bedienen, aber wie können wir beim Umgang mit mehrdimensionalen Arrays sie verwenden, um einen Schlüsselwertdifferenzvergleich zu erreichen? Dieser Artikel beantwortet diese Frage und liefert ein praktisches Beispiel.
Lassen Sie uns zunächst die grundlegende Verwendung von Array_Diff_Uassoc () überprüfen. Seine Syntax ist wie folgt:
array_diff_uassoc(array $array1, array $array2, callable $key_compare_func): array
Array1 : Das erste Array, das verglichen wird.
Array2 : Das zweite Array, das mit dem ersten Array verglichen wird.
KEY_COMPare_Func : Eine benutzerdefinierte Rückruffunktion, mit der die Schlüssel von zwei Arrays verglichen werden. Die Funktion muss eine Ganzzahl zurückgeben, die das Ergebnis des Vergleichs von zwei Schlüssel darstellt.
Gibt ein Array zurück, das die Differentialelemente enthält, d. H. Ein Schlüsselwertpaar, das in Array1 existiert, aber nicht in Array2 ist.
function compare_keys($key1, $key2) {
return strcasecmp($key1, $key2);
}
$array1 = [
'a' => 'apple',
'b' => 'banana',
'c' => 'cherry'
];
$array2 = [
'A' => 'apple',
'B' => 'banana',
'd' => 'date'
];
$result = array_diff_uassoc($array1, $array2, 'compare_keys');
print_r($result);
Ausgabe:
Array
(
[c] => cherry
)
Wie oben gezeigt, vergleicht Array_diff_uassoc () die Schlüssel des Arrays und bestimmt, ob die beiden Schlüssel basierend auf der Rückruffunktion Compare_keys () gleich sind.
Für mehrdimensionale Arrays müssen wir möglicherweise nicht nur die Tasten der obersten Ebene, sondern auch die Schlüssel der verschachtelten Arrays vergleichen. In diesem Fall kann Array_Diff_Uassoc () nicht direkt in mehrdimensionalen Arrays verwendet werden. Wir müssen zusätzliche Arbeit leisten, um diese Situation zu bewältigen.
Rekursiv durch mehrdimensionale Arrays : Da mehrdimensionale Arrays verschachtelte Strukturen sind, können wir rekursive Methoden verwenden, um jede Arrayschicht zu verarbeiten.
Vergleich der Schlüsselwerte mit benutzerdefinierten Rückruffunktionen : Während des Rekursionsprozesses können wir eine Rückruffunktion für den Schlüsselwertdifferenzvergleich jeder Array -Schicht definieren.
function compare_keys($key1, $key2) {
return strcasecmp($key1, $key2);
}
function recursive_array_diff_uassoc($array1, $array2, $key_compare_func) {
$result = [];
foreach ($array1 as $key => $value) {
// Wenn der aktuelle Wert ein Array ist,Rekursiver Anruf
if (is_array($value)) {
$sub_result = recursive_array_diff_uassoc($value, $array2[$key] ?? [], $key_compare_func);
if (!empty($sub_result)) {
$result[$key] = $sub_result;
}
} else {
// Vergleichen Sie den aktuellen Wert mit dem Wert im Zielarray
if (!isset($array2[$key]) || $key_compare_func($key, $key) !== 0) {
$result[$key] = $value;
}
}
}
return $result;
}
$array1 = [
'a' => 'apple',
'b' => ['ba' => 'banana', 'bb' => 'blueberry'],
'c' => 'cherry'
];
$array2 = [
'a' => 'apple',
'b' => ['ba' => 'banana', 'bb' => 'blackberry'],
'd' => 'date'
];
$result = recursive_array_diff_uassoc($array1, $array2, 'compare_keys');
print_r($result);
Ausgabe:
Array
(
[b] => Array
(
[bb] => blueberry
)
[c] => cherry
)
In diesem Beispiel durchqueren wir das mehrdimensionale Array rekursiv und führen Vergleiche für Schlüsselwertunterschiede für jede Array-Ebene durch. Beachten Sie, dass wir beim Vergleich mehrdimensionaler Arrays verschachtelte Arrays separat verarbeiten.
Die Funktion array_diff_uassoc () selbst unterstützt den Vergleich der multidimensionalen Arrays von Schlüsselwert nicht direkt, sondern durch rekursive Mittel können wir die Schlüsselwertunterschiede jeder Schicht in einem mehrdimensionalen Array vergleichen. Durch benutzerdefinierte Rückruffunktionen können wir auch die wichtigste Vergleichsmethode genau steuern und unseren Vergleich flexibler und effizienter gestalten. Im obigen Beispiel können wir deutlich sehen, wie Sie array_diff_uassoc () anwenden, um komplexe mehrdimensionale Arrays zu verarbeiten.