如果针是一个arrays,我怎样才能使用in_array?

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

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

我想要做的是检查$arr1 所有值是否存在于$arr2 。 上面的例子应该是TRUE而:

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

比较$arr1$arr3会返回一个FALSE

通常我使用in_array因为我只需要检查单个值到数组中。 但在这种情况下, in_array不能使用。 我想看看是否有一个简单的方法来检查最小循环。

更新澄清。

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

使用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 } 

你可以使用array_intersect或array_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 } 

您可以尝试使用array_diff()函数来查找两个数组之间的区别,这可能对您有所帮助。 我想澄清你的意思,第一个数组中的所有值必须在第二个数组中,而不是相反。

在我的特殊情况下,我需要检查一下是否有一对id是在之前处理的。 所以简单的array_diff()不适合我。

相反,我从按照字母顺序sorting的ID生成密钥,并在in_array中使用它们:

 <?php $pairs = array(); // ... $pair = array($currentId, $id); sort($pair); $pair = implode('-', $pair); if (in_array($pair, $pairs)) { continue; } $pairs[$pair] = $pair; 

这可能不是一个最佳的解决scheme,但我只需要一个肮脏的脚本被执行一次。