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