2013-04-08 73 views
6

我有一個在3到12之間的任何值生成的數組,它從帳戶信息生成數組;PHP如果in_array爲多個值

$result = $ad->user()->groups($user['username']); 

我要檢查這個數組的多個值(約4或5),如果其中任何一個的都在上面做什麼的裏面,如果,我可以通過一個值做到這一點很容易:

if (in_array("abc",$result)) { $this->login_session($user); } 

有沒有一種簡單的方法來檢查多個值這一個數組中它比其他連續OR:

if (in_array("abc",$result) || in_array("123",$result) || in_array("def",$result) || in_array("456",$result)) { 
    $this->login_session($user); 
    } 
+0

您可以傳遞一個數組作爲搜索值。 – Voitcus 2013-04-08 13:32:24

+4

@all如果你將'in_array'數組作爲針,它只返回true,如果needle數組與精確匹配乾草堆中的數組。所以要拋出骨頭,這可能有點誤導? [見測試用例](http://codepad.org/fLKLfd0K) – Emissary 2013-04-08 13:45:25

+1

謝謝Emissary,我對所有的答案/評論都有這個確切的問題。如果任何值都在數組中,那麼我需要它是正確的,但是建議僅在您說的完全匹配時才起作用。 – toups 2013-04-08 13:50:12

回答

16

嘗試,看看這是否是有幫助的:

if(array_intersect($result, array('abc', '123', 'def'))) { 
    $this->login_session($user); 
} 
+0

在{{但除此之外,這對我工作,謝謝! – toups 2013-04-08 14:32:04

2

這應該是你所追求的:

$a = array(1,2,3,4,5); 

$b = array(6,8); 

function is_in_array($needle, $haystack) { 

    foreach ($needle as $stack) { 

     if (in_array($stack, $haystack)) { 
      return true; 
     } 
    } 

    return false; 
} 

var_dump(is_in_array($b, $a)); 

通過針基本上循環,並在草堆它的陣列中運行的。返回true,一旦發現,否則返回false。