如果针是一个数组,我如何使用in_array?

时间:2010-02-21 01:25:27

标签: php arrays search compare

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

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

我想要检查$arr1中是否存在$arr2中的所有值。以上示例应为TRUE while:

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

$arr1$arr3进行比较将返回FALSE

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

更新澄清。

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

4 个答案:

答案 0 :(得分:78)

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

答案 1 :(得分:28)

您可以使用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
}

答案 2 :(得分:5)

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

答案 3 :(得分:0)

在我的特定情况下,我需要检查之前是否处理过一对ID。如此简单array_diff()对我不起作用。

相反,我从按字母顺序排序的ID生成密钥,并将它们与in_array一起使用:

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

这可能不是最佳解决方案,但我只需要执行一次脏脚本。