4

我有两个数组,例如:

array1={1,2,3,4,5,6,7,8,9};
array2={4,6,9}

有没有什么功能可以让我确定它array2完全存在于array1?

我知道我可以in_array()在循环中使用该函数,但在我将拥有包含数百个元素的大型数组的情况下,我正在寻找一个函数。

4

4 回答 4

11

尝试:

$fullyExists = (count($array2) == count(array_intersect($array2, $array1));

array_intersect.php函数将仅返回所有其他参数中存在的第二个数组的元素(在这种情况下仅返回第一个数组)。因此,如果交集的长度等于第二个数组的长度,则第二个数组完全包含在第一个数组中。

于 2012-05-18T10:29:33.407 回答
1

你可以使用array_intersect它,但你必须要小心一点。

如果要匹配的数组没有重复项,则可以使用

// The order of the arrays matters!
$isSubset = count(array_intersect($array2, $array1)) == count($array2);

但是,如果例如,这将不起作用$array2 = array(4, 4)。如果重复是一个问题,您还需要使用array_unique

$unique = array_unique($array2);
// The order of the arrays matters!
$isSubset = count(array_intersect($unique, $array1)) == count($unique);

数组的顺序很重要的原因是作为第一个参数给定的数组array_intersect必须没有重复项。如果参数被切换,这个要求将从 移动$array2$array1,这很重要,因为它可以改变函数的行为。

于 2012-05-18T10:31:46.560 回答
0

快速简便的解决方案:

 array_diff(array(1,2,3,4,5,6,7,8,9),array(4,6,9));

如果返回的是一个空数组,它在数组中,否则他会输出不是的项

于 2012-05-18T10:35:23.490 回答
0

我没有尝试使用复杂的数组,而是比较了我的工作

var_dump(array(1,2,3,4,5,6,7,8,9) === array(4,6,9));
var_dump(array(1,2,3,4,5,6,7,8,9) === array(1,2,3,4,5,6,7,8,9));
于 2012-05-18T10:42:48.120 回答