白名單隻有一些陣列鍵
如果只想允許陣列中的某些鍵,特別是當陣列來自請求引數時,可以將 array_intersect_key
與 array_flip
一起使用。
$parameters = ['foo' => 'bar', 'bar' => 'baz', 'boo' => 'bam'];
$allowedKeys = ['foo', 'bar'];
$filteredParameters = array_intersect_key($parameters, array_flip($allowedKeys));
// $filteredParameters contains ['foo' => 'bar', 'bar' => 'baz]
如果 parameters
變數不包含任何允許的鍵,則 filteredParameters
變數將包含一個空陣列。
從 PHP 5.6 開始,你也可以使用 array_filter
執行此任務,將 ARRAY_FILTER_USE_KEY
標誌作為第三個引數傳遞 :
$parameters = ['foo' => 1, 'hello' => 'world'];
$allowedKeys = ['foo', 'bar'];
$filteredParameters = array_filter(
$parameters,
function ($key) use ($allowedKeys) {
return in_array($key, $allowedKeys);
},
ARRAY_FILTER_USE_KEY
);
使用 array_filter
提供了對金鑰執行任意測試的額外靈活性,例如 $allowedKeys
可以包含正規表示式而不是普通字串。它還更明確地說明了程式碼的意圖,而不是 array_intersect_key()
與 array_flip()
相結合。