In der täglichen PHP -Entwicklung müssen wir häufig Arrays basierend auf bestimmten "Whitelist -Schlüssel" oder "Blacklist -Schlüssel" filtern. Die von PHP bereitgestellten Funktionen Array_flip () und Array_intersect_key () können diese Anforderung sehr effizient erreichen. In diesem Artikel werden spezifische Codebeispiele verwendet, um vorzustellen, wie diese beiden Funktionen verwendet werden, um die Aufgabe der Array -Filterung zu vervollständigen.
Diese Funktion wird verwendet, um Schlüssel und Werte in einem Array auszutauschen.
array_flip(array $array): array
Eingabe: ein Array.
Ausgabe: Das Array, nachdem das Schlüsselwertpaar umgedreht wurde (Hinweis: Der Wert des ursprünglichen Arrays muss eindeutig sein und kann als skalarer Wert für den Schlüssel verwendet werden).
Diese Funktion wird verwendet, um Elemente im Array zurückzugeben, in dem auch alle Schlüssel in einem anderen Array existieren.
array_intersect_key(array $array, array ...$arrays): array
Eingabe: Zwei oder mehr Arrays.
Ausgabe: Nur Elemente im ersten Array, die gleichzeitig in allen nachfolgenden Arrays erscheinen.
Angenommen, wir erhalten die folgenden Daten aus dem Benutzerformular:
$userInput = [
'username' => 'john_doe',
'password' => '123456',
'email' => 'john@example.com',
'token' => 'abcd1234', // Illegale Felder
];
Wir möchten nur die drei Felder "Benutzernamen" , "Passwort" und "E -Mail" behalten, und die anderen sollten herausgefiltert werden.
$allowedKeys = ['username', 'password', 'email'];
// Ändern Sie erlaubte Schlüssel zu Schlüsselnamen
$allowedKeysFlipped = array_flip($allowedKeys);
// Holen Sie sich die Kreuzung,Halten Sie Felder mit dem gleichen Schlüssel
$filteredInput = array_intersect_key($userInput, $allowedKeysFlipped);
print_r($filteredInput);
Array
(
[username] => john_doe
[password] => 123456
[email] => john@example.com
)
Auf diese Weise können wir Arrays flexibel und sicher filtern und vermeiden, dass illegale Felder weiterhin verarbeitet oder sogar in die Datenbank geschrieben werden.
Angenommen, Sie haben eine API -Schnittstelle entwickelt und die folgenden URL -Parameter erhalten:
https://m66.net/api/user/update?username=jane&password=78910&is_admin=1
Sie möchten nicht, dass der Client sensible Felder wie IS_ADMIN nach Belieben ändert und nur den Benutzernamen und das Kennwort aktualisiert.
Sie können das tun:
$input = $_GET;
$allowed = ['username', 'password'];
$safeInput = array_intersect_key($input, array_flip($allowed));
// Jetzt $safeInput Enthält nur erlaubte Felder
Diese Methode kann den Whitelisting -Mechanismus von API -Parametern leicht implementieren und die Sicherheit verbessern.
Durch Kombinieren von Array_flip () und Array_intersect_key () können wir wichtige Filtervorgänge von Arrays sehr bequem implementieren. Dieser Ansatz ist nicht nur präzise in Code und hoher Leistung, sondern auch einfach zu warten. Es eignet sich für die Formverarbeitung, die API -Parameterfilterung und andere Szenarien.
In der tatsächlichen Entwicklung wird empfohlen, diese Logik in eine Funktion zu integrieren, beispielsweise:
function filter_array_keys(array $data, array $allowedKeys): array {
return array_intersect_key($data, array_flip($allowedKeys));
}
Auf diese Weise ist Ihr Code modularer und lesbarer.