我有两个数组,例如:
array1={1,2,3,4,5,6,7,8,9};
array2={4,6,9}
有没有什么功能可以让我确定它array2
完全存在于array1
?
我知道我可以in_array()
在循环中使用该函数,但在我将拥有包含数百个元素的大型数组的情况下,我正在寻找一个函数。
尝试:
$fullyExists = (count($array2) == count(array_intersect($array2, $array1));
该array_intersect.php
函数将仅返回所有其他参数中存在的第二个数组的元素(在这种情况下仅返回第一个数组)。因此,如果交集的长度等于第二个数组的长度,则第二个数组完全包含在第一个数组中。
你可以使用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
,这很重要,因为它可以改变函数的行为。
快速简便的解决方案:
array_diff(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(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));