毎日の開発では、「キーホワイトリスト」ロジックと呼ばれることが多い連想配列から指定された「キー」のみを維持する必要性に遭遇することがよくあります。 array_intersect_key()を使用してこの目標を達成することはできますが、今日はわずかに「不人気な」が非常に柔軟な方法を紹介します。Array_diff_ukey ()を使用してキーホワイトリストを実装します。
array_diff_ukey()は、PHPによって提供される関数であり、2つ以上の配列のキー名を比較し、コールバック関数を使用してキー名が等しいかどうかを判断します。この関数は、最初の配列に存在するが、他の配列には存在しないキー価値ペアを返します。
構文は次のとおりです。
array_diff_ukey(array $array1, array $array2, callable $key_compare_func): array
array_diff_ukey()はキーを「除外」するために使用されますが、ホワイトリストのキーを少し「短い」で「保持」するために使用できます。原則は次のとおりです。
ホワイトリストキーを含む配列を構築します(null値の配列にすることができます)。
カスタムキー比較関数を介してロジックを逆転させ、ホワイトリストのキーのみが保持されるようにします。
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()などの関数を使用する柔軟性により、一般的な需要ロジックをさまざまな方法で実装できます。より堅牢で再利用可能なアレイフィルターを作成したい場合は、このアイデアを試すこともできます!