如何检查数组中的任何值是否存在于另一个数组中?

时间:2015-07-02 09:21:04

标签: php arrays

我有一个表单,提交一组用户角色供服务器处理。以下是表单发布的$data['roles']示例:

Array ( [0] => 5 [1] => 16 )

我想检查$data['roles']是否包含值16,17,18或19中的任何一个。正如您在示例中看到的那样,它包含16. in_array似乎是逻辑选择,但是传递数组值作为in_array的指针不起作用:

$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
}

documentation给出了使用数组作为针的示例,但似乎结构需要在大海捞针中完全相同才能返回true。但后来我不知道为什么我的第二个例子不起作用。我明显做错了什么或错过了什么。

检查一个数组中任何值是否存在于另一个数组中的最佳方法是什么?

编辑: This question(可能重复)不是问同样的事情。我想匹配一个数组中的任何值与另一个数组中的任何值。链接的问题想要将一个数组中的所有值与另一个数组中的值进行匹配。

2 个答案:

答案 0 :(得分:1)

下注方式是使用array_diff和空函数,我想:

if ( ! empty(array_diff($special_values, $data['roles']))) {
    throw new Exception('Some of special values are not in data roles');
}

或array_intersect如果要返回两个数组中出现的值。

答案 1 :(得分:1)

这可能对您有所帮助

  

使用array_intersect()

$result = array_intersect($data['roles'], array(16, 17, 18, 19));
print_r($result);
  

使用in_array()

$result = false;

foreach ($special_values as $val) {
    if (in_array($val, $data['roles'], true)) {
        $result = true;
    }
}