毎日のPHP開発では、特定の「ホワイトリストキー」または「ブラックリストキー」に基づいて配列をフィルタリングする必要があることがよくあります。 phpが提供するarray_flip()およびarray_intersect_key()関数は、この要件を非常に効率的に達成できます。この記事では、特定のコード例を使用して、これら2つの機能を使用して配列フィルタリングのタスクを完了する方法を紹介します。
この関数は、配列内のキーと値を交換するために使用されます。
array_flip(array $array): array
入力:配列。
出力:キー値ペアが反転した後の配列(注:元の配列の値は一意でなければならず、キーのスカラー値として使用できます)。
この関数は、すべてのキーも別の配列に存在する配列内の要素を返すために使用されます。
array_intersect_key(array $array, array ...$arrays): array
入力:2つ以上の配列。
出力:最初のアレイのすべての後続の配列に同時に表示される要素のみ。
ユーザーフォームから次のデータを受け取るとします。
$userInput = [
'username' => 'john_doe',
'password' => '123456',
'email' => 'john@example.com',
'token' => 'abcd1234', // 違法フィールド
];
3つのフィールドの「ユーザー名」 、 「パスワード」 、 「電子メール」のみを維持したいだけで、他のフィールドを除外する必要があります。
$allowedKeys = ['username', 'password', 'email'];
// 許可されたキーをキー名に変更します
$allowedKeysFlipped = array_flip($allowedKeys);
// 交差点を取得します,同じキーでフィールドを保持します
$filteredInput = array_intersect_key($userInput, $allowedKeysFlipped);
print_r($filteredInput);
Array
(
[username] => john_doe
[password] => 123456
[email] => john@example.com
)
このようにして、アレイを柔軟かつ安全にフィルタリングし、違法フィールドが処理されたり、データベースに書き込まれたりし続けることを避けることができます。
APIインターフェイスを開発し、次のURLパラメーターを受信したとします。
https://m66.net/api/user/update?username=jane&password=78910&is_admin=1
クライアントがiS_adminなどの機密フィールドを自由に変更して、ユーザー名とパスワードのみを更新することを望んでいません。
あなたはこれを行うことができます:
$input = $_GET;
$allowed = ['username', 'password'];
$safeInput = array_intersect_key($input, array_flip($allowed));
// 今 $safeInput 許可されたフィールドのみが含まれています
この方法は、APIパラメーターのホワイトリストメカニズムを簡単に実装し、セキュリティを強化することができます。
array_flip()とarray_intersect_key()を組み合わせることにより、配列のキーフィルタリング操作を非常に便利に実装できます。このアプローチは、コードと高性能で簡潔であるだけでなく、メンテナンスも簡単です。フォーム処理、APIパラメーターフィルタリング、その他のシナリオに適しています。
実際の開発では、このロジックを関数にカプセル化することをお勧めします。
function filter_array_keys(array $data, array $allowedKeys): array {
return array_intersect_key($data, array_flip($allowedKeys));
}
これにより、コードはよりモジュール式で読みやすくなります。