如果针是一个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,但我只需要一个肮脏的脚本被执行一次。