如果针是一个阵列,我如何使用in_array?

2022-08-30 09:34:26

我有2个数组,值将从数据库加载,下面是一个例子:

$arr1 = array(1,2,3);
$arr2 = array(1,2,3,4,5,6,7);

我想做的是检查 中是否存在中的所有值。上面的例子应该是一段时间:$arr1$arr2TRUE

$arr3 = array(1,2,4,5,6,7);

比较 将返回一个 .$arr1$arr3FALSE

通常我使用,因为我只需要将单个值签入数组。但在这种情况下,不能使用。我想看看是否有一种简单的方法可以以最小的循环进行检查。in_arrayin_array

更新以进行澄清。

第一个数组将是包含唯一值的集合。第二个数组可以包含重复的值。在处理之前,它们都保证是一个数组。


答案 1

使用 array_diff()

$arr1 = array(1,2,3);
$arr2 = array(1,2,3,4,5,6,7);
$arr3 = array_diff($arr1, $arr2);
if (count($arr3) == 0) {
  // all of $arr1 is in $arr2
}

答案 2

您可以使用array_intersectarray_diff

$arr1 = array(1,2,3);
$arr2 = array(1,2,3,4,5,6,7);

if ( $arr1 == array_intersect($arr1, $arr2) ) {
    // All elements of arr1 are in arr2
}

但是,如果您不需要使用交集的结果(这似乎是您的情况),则使用array_diff的空间和时间效率更高:

$arr1 = array(1,2,3);
$arr2 = array(1,2,3,4,5,6,7);
$diff = array_diff($arr1, $arr2);

if ( empty($diff) ) {
    // All elements of arr1 are in arr2
}