2013-04-08 38 views
6

Tôi có một mảng được tạo với bất kỳ nơi nào giữa 3 và 12 giá trị, nó tạo mảng từ thông tin tài khoản;PHP nếu in_array cho nhiều giá trị

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

Tôi muốn kiểm tra mảng này cho nhiều giá trị (khoảng 4 hoặc 5) và nếu ai trong số họ đang ở trong đó làm gì bên trong nếu, tôi có thể làm điều đó cho một giá trị khá dễ dàng qua:

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

có một cách đơn giản để kiểm tra điều này một mảng cho nhiều giá trị trong nó khác hơn ORS liên tiếp:

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

Bạn có thể chuyển mảng dưới dạng giá trị tìm kiếm. – Voitcus

+4

@all nếu bạn truyền 'in_array' một mảng làm kim nó chỉ trả về true nếu mảng kim là khớp chính xác với một mảng trong haystack. Vì vậy, để ném OP một xương nó có lẽ là một chút sai lầm? [xem trường hợp thử nghiệm] (http://codepad.org/fLKLfd0K) – Emissary

+1

Cảm ơn bạn Emissary, tôi đã có vấn đề chính xác với tất cả các câu trả lời/ý kiến. Tôi cần nó đúng nếu bất kỳ giá trị nào nằm trong mảng, các đề xuất chỉ hoạt động như bạn đã nói nếu chúng phù hợp chính xác. – toups

Trả lời

16

hãy thử và xem nếu điều này là hữu ích:

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

Thiếu một) trước {nhưng khác với điều này làm việc cho tôi, cảm ơn! – toups

2

này nên được những gì bạn đang sau:

$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)); 

Về cơ bản vòng qua kim và điều hành một trong mảng của nó trên đống cỏ khô. trả về true khi một cái gì đó được tìm thấy, nếu không nó sẽ trả về false.

Các vấn đề liên quan