In der täglichen Entwicklung begegnen wir häufig auf die Notwendigkeit, nur den angegebenen "Schlüssel" von einem assoziativen Array aus zu halten, das oft als "Schlüsselweißkunst" -Logik bezeichnet wird. Obwohl wir Array_intersect_key () verwenden können, um dieses Ziel zu erreichen, werden wir heute einen leicht "unpopulären", aber sehr flexiblen Weg einführen: Verwenden Sie Array_Diff_Ukey (), um wichtige Whitelisten zu implementieren.
array_diff_ukey () ist eine von PHP bereitgestellte Funktion, um die Schlüsselnamen von zwei oder mehr Arrays zu vergleichen und eine Rückruffunktion zu verwenden, um festzustellen, ob die Schlüsselnamen gleich sind. Diese Funktion gibt ein Schlüsselwertpaar zurück, das im ersten Array vorhanden ist, aber in anderen Arrays nicht existiert .
Die Syntax ist wie folgt:
array_diff_ukey(array $array1, array $array2, callable $key_compare_func): array
Obwohl Array_Diff_Ukey () verwendet wird, um den Schlüssel zu "ausschließen", können wir ihn wiederum verwenden, um den Whitelist -Schlüssel mit ein wenig "kurz" zu "halten". Das Prinzip ist wie folgt:
Erstellen Sie ein Array, das Whitelist -Schlüssel enthält (kann ein Array von Nullwerten sein);
Umkehrung der Logik durch benutzerdefinierte Schlüsselvergleichsfunktion, sodass nur Schlüssel in Whitelist -Arrays erhalten bleiben;
Verwenden Sie Array_Diff_Ukey (), um Schlüssel zu "entfernen", die nicht im Whitelisten aus dem ursprünglichen Array enthalten sind.
Hier ist ein vollständiges Beispiel: Angenommen, wir haben ein Datenarray $ -Daten , das das Formular einreicht, und wir möchten nur den "Benutzernamen" und "E -Mail" der Schlüssel erhalten:
<?php
// Simulierte Benutzerübermittlungsdaten
$data = [
'username' => 'john_doe',
'email' => 'john@example.com',
'password' => '123456',
'redirect' => 'https://m66.net/welcome'
];
// Definieren Sie den Whitelist -Schlüssel
$whitelistKeys = [
'username' => true,
'email' => true,
];
// array_diff_ukey Reverse -Verarbeitungslogik
$filteredData = array_diff_ukey($data, $whitelistKeys, function ($key1, $key2) {
// Schlüssel, die im Whitelist erhalten bleiben
return $key1 === $key2 ? 0 : -1;
});
// Entfernen Sie diese aus dem ursprünglichen Array“Nicht auf der Whitelist”Schlüssel
$cleanData = array_diff_key($data, $filteredData);
// Ausgangsergebnis
print_r($cleanData);
/*
Ausgangsergebnis:
Array
(
[username] => john_doe
[email] => john@example.com
)
*/
?>
Die Logik der Implementierung der Schlüsselweißhungerhöhe mit Array_Diff_Ukey () , obwohl sie leicht gewunden sind, enthält:
Stärkere Flexibilität : Kann eine komplexe Schlüsselanpassungslogik implementieren, z. B. das Ignorieren von Fall, die Verarbeitung von Präfixen usw.;
Hohe Lesbarkeit (bei Verwendung mit Kommentaren);
Keine Nebenwirkungen : Das ursprüngliche Array wird nicht geändert.
Sie können dieses Schreiben als Werkzeugfunktion für:
Filteren Sie benutzerfreundliche Daten;
Schutz der Sicherheitsfelder der Systemkonfiguration;
Steuert den Ausgangsinhalt der Schnittstellenantwortstruktur.
Obwohl PHP eine Vielzahl von Methoden zur Manipulation von Arrays bietet, ermöglicht die Flexibilität der Verwendung von Funktionen wie Array_Diff_Ukey () die Implementierung der gemeinsamen Nachfragelogik auf unterschiedliche Weise. Wenn Sie einen robusteren und wiederverwendbareren Array -Filter erstellen möchten, können Sie diese Idee auch versuchen!