【问题标题】:How can I check if any value in an array is present in another array?如何检查数组中的任何值是否存在于另一个数组中?
【发布时间】:2015-09-19 17:54:29
【问题描述】:

我有一个表单,它提交一组用户角色以供服务器处理。以下是表单发布的$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
}

此外,将两个数组之间的位置切换为 needle 和 haystack 不会改变结果。如果我只是问 16 是否在数组中,它可以正常工作:

$special_value = 16;

if (in_array($special_value, $data['roles'])) {
    // this returns true
}

documentation 给出了使用数组作为指针的示例,但是似乎大海捞针中的结构需要完全相同才能返回true。但是我不明白为什么我的第二个例子不起作用。我显然在这里做错了什么或遗漏了一些东西。

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

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

【问题讨论】:

  • array_intersect 是您正在寻找的。​​span>
  • array_intersect() 可能是更合乎逻辑的选择
  • 谢谢大家。我想得到一个真假结果,array_intersect 给出了一个匹配数组,但我想我可以检查if array_intersect 的结果是否为空,如果不是,请执行我的逻辑?
  • @BenFortune 感谢您的链接,但是在那个问题中,他想检查针中的 all 值是否在大海捞针中。在我的示例中,我只想知道针中的 any 值是否存在于大海捞针中。

标签: php arrays


【解决方案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;
    }
}

【讨论】:

  • 是的,这就是我需要做的,但我只希望$result 是真或假。由于array_intersect 返回一个匹配值数组,我将只检查$result 是否为空,然后根据它执行我的逻辑。
【解决方案2】:

我认为最好的方法是使用 array_diff 和空函数:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-20
    • 1970-01-01
    • 1970-01-01
    • 2020-08-23
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    • 2022-07-11
    相关资源
    最近更新 更多