检查一个数组中的所有值是否都存在于另一个数组中

时间:2016-08-27 00:36:31

标签: php

我正在尝试检查数组中是否存在所有必需的值。我认为使用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”,但这会返回一个空数组结果。

我错过了什么?

2 个答案:

答案 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;
}