验证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”,它仍然有效。