Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
验证php数组的数组键_Php_Arrays_Validation - Fatal编程技术网

验证php数组的数组键

验证php数组的数组键,php,arrays,validation,Php,Arrays,Validation,我有两个数组:$values和$availableKeys。如果$values包含不允许的键,我想抛出一个异常。目前我正在运行这段代码 foreach ($values as $key => $value) { if (!in_array($key, $availableKeys)) { throw new RuntimeException( 'Not allowed key' );

我有两个数组:
$values
$availableKeys
。如果
$values
包含不允许的键,我想抛出一个异常。目前我正在运行这段代码

    foreach ($values as $key => $value) {
        if (!in_array($key, $availableKeys)) {
            throw new RuntimeException(
                'Not allowed key'
            );
        }
    }

是否有更好的方法验证阵列?这个问题没有回答我的问题。

我只能说,测试,即数组中存在的密钥,速度更快。因此,使数组$availableKeys不是[key1,key2…],而是[key1=>1,key2=>1…]。即,翻转当前阵列

if (array_diff_key($values, array_flip($availableKeys))) {
    throw new RuntimeException(..);
}
foreach ($values as $key => $value) {
        if (!isset($availableKeys[$key])) {
            throw new RuntimeException(
                'Not allowed key'
            );
        }
    }
可以使用数组_diff()搜索不允许的键:

$allowedKeys = array("a","b","c");
$test = array("a" => "asdf", "c" => "asdf", "d" => "asdf");
$notAllowedKeys = array_diff(array_keys($test), $allowedKeys);
if($notAllowedKeys) {
    print "One or more keys are not allowed";
    print_r($notAllowedKeys);  
}

活生生的例子:

让我不满意。这不是一个PHP错误。当你运行代码时,你得到了什么吗?我已经更新了问题,删除了那句话。要点在代码下面:“存在验证数组的更好方法吗?”不要对保证存在的变量使用
empty
<代码>如果($notAllowedKeys)执行完全相同的操作,而不会不必要地抑制错误报告。为什么不应该使用empty()?如果没有发现差异,array_diff()将返回一个空数组,那么为什么不使用empty()检查一个空数组呢?因为您不需要抑制错误报告。明白你的意思吗?在本例中,$test中没有设置键“b”,它仍然有效。