Wenn Sie sich mit Array -Differenzsätzen in PHP befassen, sind Array_Diff () und Array_Diff_Ukey () zwei häufig genannte Funktionen. Für bestimmte Bedürfnisse sehen wir jedoch häufig Entwickler dazu, Array_Keys () mit Array_Diff () anstelle von Array_Diff_Ukey () zu verwenden. Was sind die Überlegungen dahinter? In diesem Artikel werden Beispiele zur Analyse der Auswirkungen dieser beiden Methoden kombiniert und die Vor- und Nachteile verglichen.
Array_Diff_Ukey () wird verwendet, um die Schlüssel von zwei Arrays basierend auf benutzerdefinierten Rückruffunktionen zu vergleichen und Teile zurückzugeben, die im ersten Array vorhanden sind, aber in anderen Arrays nicht existieren. Die Syntax dieser Funktion lautet wie folgt:
array array_diff_ukey(array $array1, array $array2, callable $key_compare_func);
Zum Beispiel:
function key_compare($a, $b) {
return strcmp($a, $b);
}
$array1 = ["a" => 1, "b" => 2, "c" => 3];
$array2 = ["b" => 4, "d" => 5];
$result = array_diff_ukey($array1, $array2, 'key_compare');
print_r($result); // Ausgabe: Array ( [a] => 1 [c] => 3 )
Da array_diff_ukey () eine Rückruffunktion zum Vergleich verwendet, hat es einen gewissen Einfluss auf die Leistung und erhöht die Komplexität des Codes. In einigen Fällen können wir es durch Folgendes ersetzen:
$array1 = ["a" => 1, "b" => 2, "c" => 3];
$array2 = ["b" => 4, "d" => 5];
// Holen Sie sich den wichtigsten Unterschiedssatz
$diffKeys = array_diff(array_keys($array1), array_keys($array2));
// Konstruieren Sie ein neues Array
$result = array_intersect_key($array1, array_flip($diffKeys));
print_r($result); // Ausgabe: Array ( [a] => 1 [c] => 3 )
Die Logik dieser Methode lautet:
Holen Sie sich zuerst die Schlüsselnamen der beiden Arrays;
Verwenden Sie Array_Diff (), um den Differenzsatz von Schlüssel zu berechnen.
Extrahieren Sie dann die entsprechenden Schlüsselwerte im ursprünglichen Array über Array_intersect_key () .
Vergleichselemente | array_diff_ukey () | array_keys () + array_diff () |
---|---|---|
Lesbarkeit | Medium müssen eine Vergleichsfunktion definieren | Höhere, klare Logik |
Flexibilität | Hohe, anpassbare Vergleichslogik | Im Allgemeinen ist der Standardvergleich der String -Vergleich |
Leistung | Etwas langsam, mit Rückruffunktionen einbezogen | Normalerweise schneller, insbesondere für große Datenmengen |
Kompatibilität | PHP ist eingebaut, mit guter Unterstützung | Vollständig basierend auf grundlegenden Funktionen, starke Kompatibilität |
Anwendbare Szenarien | Komplexe Schlüsselvergleichslogik | Einfacher Schlüsselunterschied festgelegtes Urteilsvermögen |
Wartbarkeit | Schlechte Rückruffunktion ist anfällig für Fehler | Ok, klare Struktur |
In den meisten Fällen, wenn Sie nur vergleichen müssen, ob es Unterschiede in den Schlüssel des Array gibt, ist mit Array_Keys () + Array_Diff () mit Array_intersect_key () intuitiver, einfach zu lesen und besser zu leser. Wenn Sie die Vergleichslogik (z. B. Fallempfindlichkeit, numerische Vergleich usw.) anpassen müssen, ist Array_Diff_Ukey () ein geeigneteres Werkzeug.