PHP Array Diff Funktion - Ein umfassender Leitfaden
Die PHP-Funktion array_diff_ukey vergleicht Arrays und gibt die Differenz anhand einer benutzerdefinierten Schlüsselvergleichsfunktion zurück.
PHP array_diff_ukey() Funktion - Ein umfassender Leitfaden
In PHP ist die Funktion array_diff_ukey() ein leistungsstarkes Werkzeug, das Ihnen dabei helfen kann, Arrays zu vergleichen und die Differenz zwischen ihnen anhand einer benutzerdefinierten Schlüsselvergleichsfunktion zurückzugeben. In diesem Artikel werfen wir einen genaueren Blick auf die Funktionsweise dieser Funktion und wie Sie sie in Ihren PHP-Projekten einsetzen können.
Funktionssignatur & Parameter
array_diff_ukey(array $array, array ...$arrays, callable $key_compare_func): arrayDies ist die Notation des PHP-Handbuchs für die Funktion. Zur Laufzeit ist das letzte Argument, das Sie übergeben, immer der Vergleichscallback; jedes Argument davor wird als array behandelt.
Parameter:
$array: Das Basis-array, mit dem verglichen wird.$arrays: Ein oder mehrere Arrays, die mit dem Basis-array verglichen werden.$key_compare_func: Ein Callable, das zwei Schlüssel vergleicht und eine ganze Zahl kleiner als, gleich oder größer als null zurückgibt (derselbe Vertrag wie ein usort-Komparator).
Rückgabewert: Ein array mit den Einträgen aus $array, deren Schlüssel in keinem der anderen Arrays vorhanden sind. Werte werden nie überprüft — nur Schlüssel.
Wann würde ich es verwenden?
Meistens reicht array_diff_key() aus: Es entfernt Einträge, deren Schlüssel in anderen Arrays vorkommen, mithilfe eines einfachen ===-Schlüsselvergleichs. Greifen Sie nur dann auf array_diff_ukey() zurück, wenn „Ist dieser Schlüssel derselbe?" eine benutzerdefinierte Logik erfordert — beispielsweise beim Vergleich von Schlüsseln unabhängig von der Groß-/Kleinschreibung, beim Vergleich nur eines Schlüsselpräfixes oder beim Normalisieren numerischer Strings vor dem Abgleich. Wenn Sie stattdessen Werte mit einem Callback vergleichen möchten, siehe array_udiff(); um sowohl Schlüssel als auch Werte zu vergleichen, siehe array_diff_uassoc().
Wie funktioniert die PHP array_diff_ukey() Funktion?
Die Funktion array_diff_ukey() nimmt zwei oder mehr Arrays als Argumente entgegen und vergleicht deren Einträge anhand der von Ihnen bereitgestellten Schlüsselvergleichsfunktion. Die Schlüsselvergleichsfunktion sollte eine ganze Zahl kleiner als, gleich oder größer als null zurückgeben, abhängig vom Ergebnis des Vergleichs.
Wenn das Vergleichsergebnis kleiner als null ist, wird das erste Argument als kleiner als das zweite betrachtet. Wenn das Ergebnis größer als null ist, wird das erste Argument als größer als das zweite betrachtet. Wenn das Ergebnis gleich null ist, werden die beiden Argumente als gleich betrachtet.
Verwendung der PHP array_diff_ukey() Funktion
Hier ist ein Beispiel, wie Sie die Funktion array_diff_ukey() in PHP verwenden können:
PHP-Beispiel zur Verwendung der array_diff_ukey-Funktion
<?php
function key_compare_func($a, $b)
{
if ($a === $b) {
return 0;
}
return ($a > $b)? 1:-1;
}
$array1 = ["a" => "green", "b" => "brown", "c" => "blue", "red"];
$array2 = ["a" => "green", "yellow", "red"];
$result = array_diff_ukey($array1, $array2, 'key_compare_func');
print_r($result);
?>In diesem Beispiel wird die Funktion array_diff_ukey() verwendet, um die Einträge in $array1 und $array2 anhand einer benutzerdefinierten Schlüsselvergleichsfunktion namens key_compare_func zu vergleichen. Das resultierende array, das in $result gespeichert wird, enthält die Einträge aus $array1, die nicht in $array2 vorhanden sind.
Hinweis: Im Callback repräsentieren $a und $b die Schlüssel der Arrays, nicht die Werte.
Ausgabe:
Array
(
[b] => brown
[c] => blue
)Schritt für Schritt: $array1 hat die Schlüssel a, b, c und 0 (das nicht-indizierte "red" erhält den ganzzahligen Schlüssel 0). $array2 hat die Schlüssel a, 0 und 1. Die Schlüssel a und 0 existieren in beiden Arrays, also entfernt array_diff_ukey() "green" und "red" aus dem Ergebnis und lässt nur die Einträge übrig, deren Schlüssel (b, c) einzigartig für $array1 sind.
Benutzerdefinierte Schlüsselvergleichsfunktion
Die benutzerdefinierte Schlüsselvergleichsfunktion ist ein wesentlicher Bestandteil der Funktion array_diff_ukey(), da sie bestimmt, wie die Einträge in den beiden Arrays verglichen werden. Hier ist ein Beispiel einer benutzerdefinierten Schlüsselvergleichsfunktion:
PHP-Beispiel einer benutzerdefinierten array-Schlüsselvergleichsfunktion
function key_compare_func($a, $b)
{
if ($a === $b) {
return 0;
}
return ($a > $b)? 1:-1;
}In diesem Beispiel gibt die Funktion key_compare_func() den Wert 0 zurück, wenn die beiden Argumente gleich sind, 1, wenn das erste Argument größer als das zweite ist, und -1, wenn das erste Argument kleiner als das zweite ist.
Hinweis zu Type Juggling: Beim Vergleich von Schlüsseln gemischter Typen (z. B. Strings und Ganzzahlen) kann PHPs lockerer Vergleich in Ihrem Callback zu unerwarteten Ergebnissen führen. Stellen Sie sicher, dass Ihr Callback die Typkonvertierung explizit behandelt oder eine strikte Vergleichsoperation (===) verwendet, wenn eine genaue Typübereinstimmung erforderlich ist.
Ein praktisches Beispiel: Schlüssel ohne Berücksichtigung der Groß-/Kleinschreibung vergleichen
Das obige Beispiel verhält sich genauso wie das einfachere array_diff_key(). Der benutzerdefinierte Callback lohnt sich erst dann, wenn der Vergleich selbst nicht-trivial ist — zum Beispiel beim Abgleich von Schlüsseln unabhängig von der Groß-/Kleinschreibung:
Obwohl "Host" und "PORT" sich in der Schreibweise von "host" und "port" unterscheiden, behandelt strcasecmp sie als gleiche Schlüssel, sodass sie entfernt werden. Nur Debug, das keine Entsprechung in $defaults hat, bleibt erhalten:
Array
(
[Debug] => 1
)Ein einfaches array_diff_key() hätte hier alle drei Einträge behalten, da "Host" !== "host". Genau dieser Unterschied zeigt, wann array_diff_ukey() das richtige Werkzeug ist.
Fazit
Die Funktion array_diff_ukey() vergleicht Arrays anhand ihrer Schlüssel mithilfe eines von Ihnen bereitgestellten Callbacks und gibt die Einträge aus dem ersten array zurück, deren Schlüssel in den anderen Arrays nicht vorhanden sind. Verwenden Sie sie, wenn die Schlüsselgleichheit eine benutzerdefinierte Logik erfordert; greifen Sie auf das einfachere array_diff_key() zurück, wenn ein strikter Schlüsselvergleich ausreicht.
Verwandte Funktionen, die es wert sind, gekannt zu werden:
- array_diff_key() — Schlüsselvergleich ohne Callback.
- array_diff_uassoc() — vergleicht sowohl Schlüssel (mit Callback) als auch Werte.
- array_udiff() — vergleicht Werte mit einem Callback.
- array_intersect_ukey() — das Gegenteil: behält Einträge, deren Schlüssel übereinstimmen.