Php 如何检查数组中的任何值是否存在于另一个数组中?
我有一个表单,它提交一组用户角色供服务器处理。以下是表单发布的Php 如何检查数组中的任何值是否存在于另一个数组中?,php,arrays,Php,Arrays,我有一个表单,它提交一组用户角色供服务器处理。以下是表单发布的$data['roles']示例: 数组([0]=>5[1]=>16) 我想检查$data['roles']是否包含值16、17、18或19之一。正如您在示例中看到的,它包含16个,但在\u数组中作为的指针传递一个值数组不起作用: $special_values = array(16, 17, 18, 19); if (in_array($special_values, $data['roles'])) { // this
$data['roles']
示例:
数组([0]=>5[1]=>16)
我想检查$data['roles']
是否包含值16、17、18或19之一。正如您在示例中看到的,它包含16个<这里的逻辑选择似乎是在\u数组中使用code>,但在\u数组中作为的指针传递一个值数组不起作用:
$special_values = array(16, 17, 18, 19);
if (in_array($special_values, $data['roles'])) {
// this returns false
}
也不会在数组中传递完全相同的值:
$special_values = array(5, 16);
if (in_array($special_values, $data['roles'])) {
// this also returns false
}
此外,在针线阵和干草堆阵之间切换位置不会改变结果。如果我只是问数组中是否有16,它可以正常工作:
$special_value = 16;
if (in_array($special_value, $data['roles'])) {
// this returns true
}
给出了将数组用作指针的示例,但是,要使其返回true
,结构似乎需要完全相同。但是我不明白为什么我的第二个例子不起作用。很明显,我做错了什么,或者遗漏了什么
检查一个数组中的任何值是否存在于另一个数组中的最佳方法是什么
编辑:(可能重复)没有询问相同的问题。我想将一个数组中的任何值与另一个数组中的任何值进行匹配。链接的问题希望将一个数组中的所有值与另一个数组中的值进行匹配。下注的方法是使用array_diff和空函数,我认为:
if ( ! empty(array_diff($special_values, $data['roles']))) {
throw new Exception('Some of special values are not in data roles');
}
如果要返回出现在两个数组中的值,则返回数组_intersect 这可能对你有帮助
使用array\u intersect()
在数组()中使用
这就是你要找的。可能是一个更符合逻辑的选择,可能是“谢谢你们”的翻版。我想得到一个正确或错误的结果,array\u intersect
给出了一个匹配数组,但我想我可以检查如果array\u intersect
的结果是空的,如果不是空的,就执行我的逻辑?@BenFortune感谢链接,然而,在这个问题上,他想检查指针中的所有值是否都在干草堆中。在我的示例中,我只想知道指针中的任何值是否存在于草堆中。是的,我需要这样做,但是我只想$result
为真或假。由于array\u intersect
返回一个匹配值的数组,我只需检查$result
是否为空,并基于此执行逻辑。
$result = array_intersect($data['roles'], array(16, 17, 18, 19));
print_r($result);
$result = false;
foreach ($special_values as $val) {
if (in_array($val, $data['roles'], true)) {
$result = true;
}
}