检查数组是否包含另一个数组的所有元素?

4
我有2个数组,第二个数组必须包含第一个数组中的所有元素,如何检查?谢谢。
For example

array 1: Array ( [0] => Email [1] => 1_Name )
array 2:  Array ( [0] => 1_Name [1] => ) 

In this case it is invalid , as array 2 do not have Email

array 1: Array ( [0] => Email [1] => 1_Name )
array 2:  Array ( [0] => 1_Name [1] => Address [2]=> Email )

 In this case it is valid 
4个回答

4
使用array_intersect()函数,并检查其输出是否具有相同的长度:
if (count(array_intersect($arr1, $arr2)) === count($arr1)) {
  // contains all
}

如果键也必须匹配的话,使用 array_intersect_assoc() 来代替。


你应该对 $arr2 进行计数吗? - StackOverflowNewbie
@StackOverflowNewbie 实际上并不重要。关键是两者的交集与第一个或第二个的内容相同,因此包含相同的集合。 - Michael Berkowski

2

array_diff在这里可能会很有用。

if( array_diff($array1,$array2)) {
    // array1 contains elements that are not in array2
    echo "invalid";
}
else {
    // all elements of array1 are in array2
    echo "valid";
}

1
$invalid = false;
foreach ($array1 as $key => $value) {
    if (!array_key_exists($key, $array2)) {
        $invalid = true;
        break;
    }
}
var_dump($invalid); 

0

有像 @Michael 建议的 array_intersect()。如果你想知道哪个元素缺失了,可以使用 array_diff()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接