我正在尝试检查数组中是否存在所有必需的值。我认为使用array_intersect
将是我应该使用的:
$required[0] = 'FirstName';
$required[1] = 'LastName';
$posted['Email'] = 'none@example.com';
$posted['FirstName'] = 'Bob';
$posted['Group'] = '5';
print_r(array_intersect($required, $posted));
所以,我想确保$posted
数组中存在“FirstName”和“LastName”。但是,缺少“LastName”,但这会返回一个空数组结果。
我错过了什么?
答案 0 :(得分:1)
如果$posted
最初来自$_POST
,(在表单上的输入值中),将设置所有键,即使某些键可能设置为{{ 1}}。由于您的''
数组中包含键值,因此最好只检查循环中的必填字段。您可以使用$required
同时验证它们是否存在并具有真值。假设以下代码是函数的主体或文件的内容,这样的东西应该起作用:
empty
为什么您使用foreach ($required as $requirement) {
// if everything has to have a value, just return false as soon as something doesn't
if (empty($posted[$requirement]) return false;
}
return true;
进行此操作的部分原因尚不清楚,因为该功能会根据array_intersect
中的值检查$required
中的值,并且您需要在$posted
中针对<{1>}中的键检查值。另一部分是$required
将返回两个数组共有的值,而不是缺少的值。
如果$posted
中的某些键确实可能不存在,最好按键而不是按值定义array_intersect
数组,然后使用$posted
。
$required
如果array_diff_key
中的$required['FirstName'] = true;
$required['LastName'] = true;
$missing_requirements = array_diff_key($required, $posted);
中的每个键都存在,则结果将为空数组,其值为$required
。
答案 1 :(得分:0)
print_r(array_intersect($required, array_keys($posted)));
简单的解决方案:
if (count(array_intersect($required, array_keys($posted))) == count($required) ) {
return true;
} else {
return false;
}