in_array多个值

我如何检查多个值,例如:

$arg = array('foo','bar'); if(in_array('foo','bar',$arg)) 

这是一个例子,所以你明白了一点,我知道这是行不通的。

将目标与干草堆相交,并确保交叉路口与目标完全相同:

 $haystack = array(...); $target = array('foo', 'bar'); if(count(array_intersect($haystack, $target)) == count($target)){ // all of $target is in $haystack } 

请注意,您只需要validation生成的交集的大小与目标值数组的大小相同即可说$haystack$target的超集。

要validation$target中至less有一个值是否在$haystack ,则可以执行以下检查:

  if(count(array_intersect($haystack, $target)) > 0){ // at least one of $target is in $haystack } 

作为开发者,你应该开始学习设置操作。 你可以想象你的数组是一个“集合”,而你正在寻找另一个的键。

检查是否存在所有的针头

 function in_array_all($needles, $haystack) { return !array_diff($needles, $haystack); } echo in_array_all( [3,2,5], [5,8,3,1,2] ); // true, all 3, 2, 5 present echo in_array_all( [3,2,5,9], [5,8,3,1,2] ); // false, since 9 is not present 

检查是否存在任何针头

 function in_array_any($needles, $haystack) { return !!array_intersect($needles, $haystack); } echo in_array_any( [3,9], [5,8,3,1,2] ); // true, since 3 is present echo in_array_any( [4,9], [5,8,3,1,2] ); // false, neither 4 nor 9 is present 
 if(in_array('foo',$arg) && in_array('bar',$arg)){ //both of them are in $arg } if(in_array('foo',$arg) || in_array('bar',$arg)){ //at least one of them are in $arg } 

恕我直言,马克·艾略特的解决scheme是这个问题最好的一个。 如果您需要在数组元素之间进行更复杂的比较操作,并且您使用的是PHP 5.3,则可能还会考虑如下内容:

 <?php // First Array To Compare $a1 = array('foo','bar','c'); // Target Array $b1 = array('foo','bar'); // Evaluation Function - we pass guard and target array $b=true; $test = function($x) use (&$b, $b1) { if (!in_array($x,$b1)) { $b=false; } }; // Actual Test on array (can be repeated with others, but guard // needs to be initialized again, due to by reference assignment above) array_walk($a1, $test); var_dump($b); 

这依靠closures; 比较function可以变得更加强大。 祝你好运!

从@Rok Kralj回答(最好的海事组织)来检查在干草堆中是否存在任何针头,你可以使用(bool)而不是!! 有时在代码审查过程中可能会造成混淆。

 function in_array_any($needles, $haystack) { return (bool)array_intersect($needles, $haystack); } echo in_array_any( array(3,9), array(5,8,3,1,2) ); // true, since 3 is present echo in_array_any( array(4,9), array(5,8,3,1,2) ); // false, neither 4 nor 9 is present