php检查数组是否包含来自另一个数组的所有数组值

pet*_*ter 99 php arrays

$all = array
(
    0 => 307,
    1 => 157,
    2 => 234,
    3 => 200,
    4 => 322,
    5 => 324
);
$search_this = array
(
    0 => 200,
    1 => 234
);
Run Code Online (Sandbox Code Playgroud)

我想知道$ all是否包含所有$ search_this值并返回true或false.有什么想法吗?

orr*_*rrd 192

以前的答案都比他们需要做的更多.只需使用array_diff.这是最简单的方法:

$containsAllValues = !array_diff($search_this, $all);
Run Code Online (Sandbox Code Playgroud)

这就是你要做的一切.

  • 这应该是答案 (18认同)
  • 谢谢你的时刻; 我想到了`array_intersect`. (4认同)
  • 是的,这是更好的解决方案 (2认同)
  • 最初的答案有效,因为空数组在 PHP 中计算结果为 false。使用“empty()”也可以,但“!”运算符确实可以正常工作。 (2认同)

jas*_*bar 149

看看array_intersect().

$containsSearch = count(array_intersect($search_this, $all)) == count($search_this);
Run Code Online (Sandbox Code Playgroud)

  • 你知道你可以省略`count()`调用吗? (11认同)
  • 即便如此:[数组比较](http://php.net/manual/en/language.operators.array.php):_"`==`如果$ a和$ b具有相同的键/值对,则为TRUE ."_,所以命令甚至不重要(使用`===`) (4认同)
  • 该答案假定$ all数组仅包含唯一值。如果不是这种情况,则可以在array_intersects函数的$ all数组上使用array_unique函数。 (2认同)
  • @orrd提供的array_diff解决方案更加干净 (2认同)

jav*_*gzz 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
Run Code Online (Sandbox Code Playgroud)


Jam*_*urz 7

我认为你正在寻找相交函数

array array_intersect ( array $array1 , array $array2 [, array $ ... ] )
Run Code Online (Sandbox Code Playgroud)

array_intersect()返回一个数组,其中包含所有参数中存在的 array1 的所有值。请注意,密钥会被保留。

http://www.php.net/manual/en/function.array-intersect.php