array_diff_ukey () ist eine sehr nützliche Funktion in PHP. Es ermöglicht es uns, die Schlüssel von zwei Arrays zu vergleichen, die auf benutzerdefinierten Vergleichsfunktionen basieren, und dann ein Array zurückzugeben, das Schlüsselwertpaare enthält, die im ersten Array vorhanden sind, jedoch nicht im zweiten Array. Obwohl diese Funktion sehr intuitiv ist, kann das Verhalten in einigen Fällen verwirrend sein, insbesondere im Umgang mit doppelten Schlüssel in einem Array.
Die grundlegende Syntax der Funktion array_diff_ukey () lautet wie folgt:
array_diff_ukey(array $array1, array $array2, callable $key_compare_func) : array
$ Array1 : Das erste Eingabebereich.
$ Array2 : Das zweite Eingangsarray.
$ key_compare_func : Eine benutzerdefinierte Rückruffunktion zum Vergleich von zwei Schlüssel. Die Funktion akzeptiert zwei Parameter und muss einen Ganzzahlwert zurückgeben, der die Beziehung zwischen den beiden Schlüssel angibt.
Bei Verwendung von array_diff_ukey () , um die Differenz zwischen Schlüsselwertpaaren zu vergleichen, durchquert PHP die Schlüssel der beiden Arrays und beurteilt, ob die Schlüssel durch die vom Benutzer bereitgestellte Vergleichsfunktion gleich sind. Wenn doppelte Schlüssel vorhanden ist, ist das Verhalten von PHP möglicherweise nicht genau das, was wir erwarten.
Wenn das Eingangsarray doppelte Schlüssel enthält, vergleicht Array_Diff_Ukey () den Wert jeder Taste mit der Taste des zweiten Arrays zum Vergleich. Insbesondere, wenn es in den beiden Arrays die gleichen Tasten gibt, aber die Schlüssel in verschiedenen Positionen im Array sind, vergleicht PHP basierend auf dem letzten Auftreten des Schlüssels und ignoriert die wiederholten Schlüssel, die zuvor erscheinen.
Wenn im Array mehrere Duplikatschlüssel vorhanden ist, führt Array_Diff_Ukey () Vergleiche durch, basierend auf dem letzten Auftreten von Schlüssel. Angenommen, wir haben die folgenden zwei Arrays:
$array1 = [
1 => 'apple',
2 => 'banana',
2 => 'orange',
3 => 'pear'
];
$array2 = [
2 => 'grape',
4 => 'watermelon'
];
In diesem Beispiel wird Key 2 in $ array1 wiederholt. Vergleichen Sie diese beiden Arrays, indem Sie array_diff_ukey () anrufen:
$result = array_diff_ukey($array1, $array2, function($key1, $key2) {
return $key1 - $key2;
});
Obwohl Key 2 zweimal erscheint, vergleicht Array_Diff_Ukey () es mit dem letzten Auftreten von 2 (d. H. Der Schlüssel, der Orange entspricht) und vergleicht es mit Key 2 in $ array2 . Infolgedessen wird Key 2 als gleich angesehen, sodass der Schlüssel nicht im Ergebnisarray angezeigt wird.
Wenn die Logik der Vergleichsfunktion komplex ist und bestimmte Vergleichsregeln beinhaltet, wird Array_Diff_Ukey () immer noch basierend auf dem letzten Auftreten jedes Schlüssels verglichen, obwohl diese Vergleichsmethode möglicherweise nicht das ist, woran wir idealerweise denken. Zu diesem Zeitpunkt können Programmierer während der Vorbereitungsstufe des Arrays doppelte Schlüssel in Betracht ziehen, um unnötige Verwirrung zu vermeiden.
Angenommen, wir möchten das Array verarbeiten, um sicherzustellen, dass die Duplikatschlüssel die Vergleichsergebnisse von Array_Diff_Ukey () nicht beeinflussen. Wir können zuerst die Funktion array_unique () verwenden, um doppelte Schlüssel zu entfernen und dann die Differenzberechnung durchzuführen.
$array1 = [
1 => 'apple',
2 => 'banana',
2 => 'orange',
3 => 'pear'
];
$array2 = [
2 => 'grape',
4 => 'watermelon'
];
// Entfernen Sie doppelte Schlüssel
$array1 = array_unique($array1, SORT_REGULAR);
$result = array_diff_ukey($array1, $array2, function($key1, $key2) {
return $key1 - $key2;
});
In diesem Beispiel verwenden wir zuerst Array_unique () , um doppelte Schlüssel in $ array1 zu entfernen, um sicherzustellen, dass der Schlüsselwertvergleich genauer ist.
array_diff_ukey () ist eine sehr leistungsstarke Array -Differenzfunktion in PHP, aber sein Verhalten kann verwirrend sein, wenn sie mit wiederholten Schlüsseln konfrontiert sind. PHP vergleicht den letzten Wert jedes Schlüssels, was bedeutet, dass doppelte Schlüssel ignoriert werden. Um die Auswirkungen von doppelten Schlüssel auf die Ergebnisse zu vermeiden, können Entwickler sicherstellen, dass der Vergleichsvorgang wie erwartet durch die Deduplizierung des Arrays durchgeführt werden kann, bevor Sie Array_Diff_Ukey () verwenden.