【发布时间】:2012-05-18 10:27:45
【问题描述】:
我有两个数组,例如:
array1={1,2,3,4,5,6,7,8,9};
array2={4,6,9}
是否有任何函数可以让我确定array2 完全存在于array1 中?
我知道我可以在循环中使用in_array() 函数,但如果我将拥有包含数百个元素的大型数组,所以我正在寻找一个函数。
【问题讨论】:
我有两个数组,例如:
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));
【讨论】: