PHP检查数组是否包含另一个数组的所有数组值


110
$all = array
(
    0 => 307,
    1 => 157,
    2 => 234,
    3 => 200,
    4 => 322,
    5 => 324
);
$search_this = array
(
    0 => 200,
    1 => 234
);

我想找出$ all是否包含所有$ search_this值并返回true或false。有什么想法吗?



@VishalKumarSahu不是完全重复:您给定的链接与检查任何元素是否包含在另一个数组中有关,而不是与是否所有元素都包含在另一个数组中有关。
Stefan

Answers:


159

看一下array_intersect()

$containsSearch = count(array_intersect($search_this, $all)) == count($search_this);

11
您知道您可以忽略这两个count()电话吗?
2013年

1
@Wrikken在期间不能对值重新排序array_intersect()?我的意思是['a', 'b'] != ['b', 'a']
sbichenko 2013年

4
即使这样:数组比较==如果$ a和$ b具有相同的键/值对,则为TRUE。” ,因此顺序甚至都没有关系(===用于此目的)
Wrikken

2
该答案假定$ all数组仅包含唯一值。如果不是这种情况,可以在array_intersects函数的$ all数组上使用array_unique函数。
Rerequestual,2013年

5
array_diff解决方案@orrd给出的解决方案要干净得多
Joseph Connolly

223

前面的答案都做着比他们需要做的更多的工作。只需使用array_diff即可。这是最简单的方法:

$containsAllValues = !array_diff($search_this, $all);

那就是你要做的。


4
谢谢你啊!我想到了array_intersect
Derek Illchuk

19
这应该是答案
马修

2
是的,它是一个更好的解决方案
Oleksandr Diudiun 2015年

1
比相交更好的解决方案!
TheBosti '17

1
我碰到了该页面,并使用了上面的解决方案,因为它解决了重复问题
Rayzor

9

array_diff短一点

$musthave = array('a','b');
$test1 = array('a','b','c');
$test2 = array('a','c');

$containsAllNeeded = 0 == count(array_diff($musthave, $test1));

// this is TRUE

$containsAllNeeded = 0 == count(array_diff($musthave, $test2));

// this is FALSE


0

这个怎么样:

function array_keys_exist($searchForKeys = array(), $searchableArray) {
    $searchableArrayKeys = array_keys($searchableArray);

    return count(array_intersect($searchForKeys, $searchableArrayKeys)) == count($searchForKeys); 
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.