In PHP wird die Funktion array_diff_uassoc () verwendet, um die Unterschiede zwischen zwei Arrays zu vergleichen und die Regeln für den Vergleich von Schlüssel anzupassen. Die grundlegende Syntax dieser Funktion lautet wie folgt:
array_diff_uassoc(array $array1, array $array2, callable $key_compare_func): array
$ array1 ist das erste Array.
$ array2 ist das zweite Array und wird mit $ array1 verglichen.
$ key_compare_func ist eine Rückruffunktion, die zwei Schlüssel vergleicht.
Die Funktion array_diff_uassoc () gibt ein Array zurück, das Elemente enthält, die in $ array1 vorhanden sind, aber nicht in $ array2 existieren. Der Vergleich basiert auf dem Schlüsselnamen (unter Verwendung einer benutzerdefinierten Rückruffunktion). Sie können jedoch auf einige Fragen stoßen: Wenn der Rückgabewert von KEY_COMPare_Func 0 , -1 oder 1 beträgt, welche Auswirkungen haben diese unterschiedlichen Rückgabewerte auf das Ergebnis der Funktion?
Wenn die Rückruffunktion von KEY_COMPare_Func 0 zurückgibt, bedeutet dies, dass die beiden Schlüssel gleich sind. In der Funktion array_diff_uassoc () bedeutet dies, dass die aktuellen Schlüsselwertpaare von $ array1 und $ array2 keinen Unterschied in den Schlüsselnamen haben. Daher werden diese Schlüsselwertpaare nicht als Teil des Unterschieds angesehen und erscheinen nicht im zurückgegebenen Ergebnisarray.
Beispiel:
$array1 = [
'apple' => 'red',
'banana' => 'yellow'
];
$array2 = [
'apple' => 'green',
'banana' => 'yellow'
];
function compare_keys($key1, $key2) {
return 0; // Es bedeutet, dass die beiden Schlüssel gleich sind
}
$result = array_diff_uassoc($array1, $array2, 'compare_keys');
print_r($result);
Ausgabe:
Array
(
[apple] => red
)
Erläuterung: Da compare_keys () 0 zurückgibt, bedeutet dies, dass die Schlüsselnamen Apple und Banane gleich sind, ist Array_Diff_Uassoc () der Ansicht, dass sie keinen Unterschied haben, sodass das Rückgabearray nur den Wert 'rot' enthält, der dem Schlüsselapfel entspricht.
Wenn KEY_COMPare_Func -1 zurückgibt, bedeutet dies, dass der Schlüssel in $ array1 kleiner als der Schlüssel in $ array2 ist. In diesem Fall ist Array_Diff_Uassoc () der Ansicht, dass das aktuelle Schlüsselwertpaar in $ array1 beibehalten werden sollte, da es in $ array2 nicht genau den gleichen Schlüssel findet. Daher erscheinen diese Schlüsselwertpaare im Ergebnisarray.
Beispiel:
$array1 = [
'apple' => 'red',
'banana' => 'yellow'
];
$array2 = [
'apple' => 'green',
'cherry' => 'red'
];
function compare_keys($key1, $key2) {
return -1; // äußern key1 Weniger als key2
}
$result = array_diff_uassoc($array1, $array2, 'compare_keys');
print_r($result);
Ausgabe:
Array
(
[banana] => yellow
)
Erläuterung: Da Compare_Keys () -1 zurückgibt und angibt, dass der Schlüsselapfel kleiner als die Schlüsselkirsche ist, findet Banane das entsprechende Schlüsselpaar in $ array1 nicht, so
Wenn KEY_COMPare_Func 1 zurückgibt, bedeutet dies, dass der Schlüssel in $ array1 größer ist als der Schlüssel in $ array2 . Zu diesem Zeitpunkt betrachtet Array_Diff_Uassoc () das aktuelle Schlüsselwertpaar in $ array1 als überflüssig, sodass es vom Ergebnisarray ausgeschlossen wird.
Beispiel:
$array1 = [
'apple' => 'red',
'banana' => 'yellow'
];
$array2 = [
'apple' => 'green',
'banana' => 'yellow'
];
function compare_keys($key1, $key2) {
return 1; // äußern key1 Größer als key2
}
$result = array_diff_uassoc($array1, $array2, 'compare_keys');
print_r($result);
Ausgabe:
Array
(
[apple] => red
)
Erläuterung: In diesem Beispiel gibt Compare_Keys () 1 zurück, was angibt, dass der Schlüsselapfel größer ist als die Schlüsselbanane . Daher kann das Schlüsselwertpaar von Apple nicht in $ array1 gefunden werden, das genau das gleiche Schlüsselpaar wie $ array2 ist, und es wird im zurückgegebenen Array angezeigt.
Bei Verwendung von Array_Diff_Uassoc () wirkt sich die Rückgabewerte 0 , -1 und 1 der Rückruffunktion direkt auf die Art und Weise aus, wie die Tasten verglichen werden:
Rückgabe 0 : bedeutet, dass die Schlüssel gleich sind und das aktuelle Schlüsselwertpaar nicht als Differenz betrachtet wird.
Rückgabe -1 : bedeutet, dass der Schlüssel in $ array1 kleiner als der Schlüssel in $ array2 ist und das aktuelle Schlüsselwertpaar im Ergebnisarray angezeigt wird.
Rückgabe 1 : bedeutet, dass der Schlüssel in $ array1 größer als der Schlüssel in $ array2 ist und das aktuelle Schlüsselwertpaar ausgeschlossen wird.
Durch Anpassung der Vergleichslogik der Rückruffunktion können wir die Vergleichsregeln flexibel steuern und so einen maßgeschneiderten Vergleich der Unterschiede erreichen.