現在の位置: ホーム> 最新記事一覧> array_diff_ukey()に基づいてキーホワイトリストロジックを実装する

array_diff_ukey()に基づいてキーホワイトリストロジックを実装する

M66 2025-05-14

毎日の開発では、「キーホワイトリスト」ロジックと呼ばれることが多い連想配列から指定された「キー」のみを維持する必要性に遭遇することがよくあります。 array_intersect_key()を使用してこの目標を達成することはできますが、今日はわずかに「不人気な」が非常に柔軟な方法を紹介します。Array_diff_ukey ()を使用してキーホワイトリストを実装します。

array_diff_ukey()とは何ですか?

array_diff_ukey()は、PHPによって提供される関数であり、2つ以上の配列のキー名を比較し、コールバック関数を使用してキー名が等しいかどうかを判断します。この関数は、最初の配列に存在するが、他の配列には存在しないキー価値ペアを返します。

構文は次のとおりです。

 array_diff_ukey(array $array1, array $array2, callable $key_compare_func): array

実装のアイデア

array_diff_ukey()はキーを「除外」するために使用されますが、ホワイトリストのキーを少し「短い」で「保持」するために使用できます。原則は次のとおりです。

  1. ホワイトリストキーを含む配列を構築します(null値の配列にすることができます)。

  2. カスタムキー比較関数を介してロジックを逆転させ、ホワイトリストのキーのみが保持されるようにします。

  3. array_diff_ukey()を使用して、元の配列からホワイトリストにないキーを「削除」します。

サンプルコード

フォームを提出するデータアレイ$データがあると仮定して、キー「ユーザー名」「電子メール」を保持するだけで、以下に完全な例を示します。

 <?php

// シミュレートされたユーザー送信データ
$data = [
    'username' => 'john_doe',
    'email' => 'john@example.com',
    'password' => '123456',
    'redirect' => 'https://m66.net/welcome'
];

// ホワイトリストキーを定義します
$whitelistKeys = [
    'username' => true,
    'email' => true,
];

// array_diff_ukey 逆処理ロジック
$filteredData = array_diff_ukey($data, $whitelistKeys, function ($key1, $key2) {
    // ホワイトリストに保持されているキー
    return $key1 === $key2 ? 0 : -1;
});

// 元の配列からそれらを削除します“ホワイトリストではありません”キー
$cleanData = array_diff_key($data, $filteredData);

// 出力結果
print_r($cleanData);

/*
出力結果:
Array
(
    [username] => john_doe
    [email] => john@example.com
)
*/
?>

アドバンテージ分析

Array_diff_ukey()を使用してキーホワイトリストを実装するロジックは、わずかに曲がっていますが、以下を提供します。

  • より強い柔軟性:ケースを無視したり、プレフィックスを処理するなど、複雑なキーマッチングロジックを実装できます。

  • 高い読みやすさ(コメントで使用する場合);

  • 副作用はありません:元の配列は変更されません。

アプリケーションシナリオ

次のツール機能として、この文章をカプセル化できます。

  • ユーザーがサビされたデータをフィルターします。

  • システム構成のセキュリティフィールドを保護します。

  • インターフェイス応答構造の出力コンテンツを制御します。

まとめ

PHPは配列を操作するためのさまざまな方法を提供しますが、 array_diff_ukey()などの関数を使用する柔軟性により、一般的な需要ロジックをさまざまな方法で実装できます。より堅牢で再利用可能なアレイフィルターを作成したい場合は、このアイデアを試すこともできます!