白名单只有一些数组键

如果只想允许数组中的某些键,特别是当数组来自请求参数时,可以将 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() 相结合。