白名單隻有一些陣列鍵

如果只想允許陣列中的某些鍵,特別是當陣列來自請求引數時,可以將 array_intersect_keyarray_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() 相結合。