Der Prototyp von array_diff_uassoc () lautet wie folgt:
array array_diff_uassoc ( array $array1 , array $array2 , callable $key_compare_func )
$ array1 und $ array2 : Zwei Arrays zu vergleichen.
$ key_compare_func : benutzerdefinierte Rückruffunktion zum Vergleichen von Schlüssel in Arrays.
Die Funktion gibt ein Array zurück, das alle Schlüsselwertpaare in $ array1 enthält, die in $ Array2 keine übereinstimmenden Schlüssel enthalten . Wichtig ist, dass der Vergleich hier auf dem Schlüsselnamen und der benutzerdefinierten Vergleichsfunktion basiert.
Die Definition der Rückruffunktion KEY_COMPare_Func lautet wie folgt:
function key_compare_func ($key1, $key2) {
// Die Logik der Vergleichstasten
}
In array_diff_uassoc () vergleicht diese Rückruffunktion nur die Schlüsselnamen und hat nichts mit dem Wert zu tun. Der Zweck dieser Funktion ist es, Entwicklern zu ermöglichen, zu definieren, wie Schlüssel in Arrays nach ihren eigenen Bedürfnissen verglichen werden.
array_diff_uassoc () vergleicht zuerst die Schlüsselnamen in $ array1 und $ array2 .
Wenn der Schlüsselname in $ array1 in $ array2 nicht vorhanden ist oder das Ergebnis des Vergleichs der Schlüsselnamen über die Rückruffunktion ungleich ist, wird das Schlüsselwertpaar in $ array1 erhalten.
Es ist zu beachten, dass dieser Vergleich ausschließlich auf dem Schlüsselnamen basiert und die Werte nicht am Vergleich beteiligt sind.
Wir müssen zur Designphilosophie von PHP zurückkehren, um dieses Verhalten zu verstehen. Der Hauptzweck der Funktion array_diff_uassoc () besteht darin, die Unterschiede im Array basierend auf dem Schlüsselnamen zu berechnen. Wenn es gleichzeitig die Differenz der Schlüsselwerte berücksichtigt, überschneidet sich die Funktion mit Array_Diff () oder Array_Diff_assoc () .
Der Entwurfszweck ist klar : Die ursprüngliche Absicht von array_diff_uassoc () besteht darin, einen Vergleich der Unterschiede in den Schlüsselnamen und nicht nur der Unterschiede in den Werten bereitzustellen. Die Wertvergleichsfunktion wurde in array_diff () und array_diff_assoc () gut implementiert.
Einschränkungen der Rückruffunktionen : Die Rückruffunktion von KEY_COMPare_Func ist nur ein Vergleich der Schlüsselnamen, nicht der Werte. Die Entwurfsphilosophie von PHP besteht normalerweise darin, jede Funktion eine einzige Sache zu ermöglichen, damit das Verhalten jeder Funktion klarer ist.
Effizienzüberlegungen : Wenn eine Rückruffunktion gleichzeitig Schlüssel und Werte vergleicht, kann die Implementierung der Funktion komplexer und ineffizienter werden. PHP ermöglicht es jeder Funktion, Aufgaben effizient und einfach durch Vergleich von Schlüssel und Werten auszufüllen.
Angenommen, wir haben das folgende Array:
$array1 = [
1 => 'apple',
2 => 'banana',
3 => 'cherry',
];
$array2 = [
1 => 'apple',
2 => 'orange',
4 => 'grape',
];
Wenn wir array_diff_uassoc () verwenden, um sie zu vergleichen, vergleichen die Rückruffunktion nur die Schlüsselnamen:
function compare_keys($key1, $key2) {
return $key1 - $key2;
}
$result = array_diff_uassoc($array1, $array2, 'compare_keys');
print_r($result);
Ausgangsergebnis :
Array
(
[3] => cherry
)
In diesem Beispiel vergleicht Array_diff_uassoc () die Schlüsselnamen des Array $ Array1 und $ Array2, um die Schlüssel zu finden, die nicht in $ array2 enthalten sind. Im Ergebnis ist 3 => Kirsche erhalten, da der Schlüssel 3 in $ array2 nicht vorhanden ist, obwohl ihre Werte unterschiedlich sind. Wie erwartet ist die Rückruffunktion nur für Schlüsselnamen gültig und die Werte werden nicht am Vergleich beteiligt.
Der Grund, warum die Rückruffunktion array_diff_uassoc () nur für Schlüsselnamen gültig ist und den Wert ignoriert, liegt hauptsächlich darin, dass das Entwurfsziel der Funktion differentielle Berechnungen basierend auf den Schlüsselnamen durchführt. Dieses Verhalten vereinfacht die Logik der Funktion und macht es effizienter und konzentriert sich auf sein Ziel: den Unterschied in den Schlüsselnamen. Wenn Sie einen unterschiedlichen Vergleich der Schlüsselwerte durchführen müssen, können Sie andere Funktionen wie array_diff_assoc () verwenden oder die Wert- und Schlüsselnamen in der Rückruffunktion verarbeiten.