現在の位置: ホーム> 最新記事一覧> array_flip()とarray_intersect_key()を使用して、配列フィルタリングを行います

array_flip()とarray_intersect_key()を使用して、配列フィルタリングを行います

M66 2025-05-14

毎日のPHP開発では、特定の「ホワイトリストキー」または「ブラックリストキー」に基づいて配列をフィルタリングする必要があることがよくあります。 phpが提供するarray_flip()およびarray_intersect_key()関数は、この要件を非常に効率的に達成できます。この記事では、特定のコード例を使用して、これら2つの機能を使用して配列フィルタリングのタスクを完了する方法を紹介します。

1。関数の紹介

1。ARRAY_FLIP ()

この関数は、配列内のキーと値を交換するために使用されます。

 array_flip(array $array): array
  • 入力:配列。

  • 出力:キー値ペアが反転した後の配列(注:元の配列の値は一意でなければならず、キーのスカラー値として使用できます)。

2。ARRAY_INTERSECT_KEY ()

この関数は、すべてのキーも別の配列に存在する配列内の要素を返すために使用されます。

 array_intersect_key(array $array, array ...$arrays): array
  • 入力:2つ以上の配列。

  • 出力:最初のアレイのすべての後続の配列に同時に表示される要素のみ。

2。使用シナリオの例

許可されたキーのみを保持するユーザー入力フィールドをフィルターします

ユーザーフォームから次のデータを受け取るとします。

 $userInput = [
    'username' => 'john_doe',
    'password' => '123456',
    'email' => 'john@example.com',
    'token' => 'abcd1234',  // 違法フィールド
];

3つのフィールドの「ユーザー名」「パスワード」「電子メール」のみを維持したいだけで、他のフィールドを除外する必要があります。

array_flip() + array_intersect_key()を使用してフィルタリングを実装してください。

 $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
)

このようにして、アレイを柔軟かつ安全にフィルタリングし、違法フィールドが処理されたり、データベースに書き込まれたりし続けることを避けることができます。

3。使用状況の展開:APIパラメーターをフィルターします

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パラメーターのホワイトリストメカニズムを簡単に実装し、セキュリティを強化することができます。

4。概要

array_flip()array_intersect_key()を組み合わせることにより、配列のキーフィルタリング操作を非常に便利に実装できます。このアプローチは、コードと高性能で簡潔であるだけでなく、メンテナンスも簡単です。フォーム処理、APIパラメーターフィルタリング、その他のシナリオに適しています。

実際の開発では、このロジックを関数にカプセル化することをお勧めします。

 function filter_array_keys(array $data, array $allowedKeys): array {
    return array_intersect_key($data, array_flip($allowedKeys));
}

これにより、コードはよりモジュール式で読みやすくなります。