2013-05-02 29 views
15

Về cơ bản những gì tôi đang tự hỏi nếu có một cách để rút ngắn một cái gì đó như thế này:Trong PHP, có cách nào ngắn để so sánh biến với nhiều giá trị không?

if ($variable == "one" || $variable == "two" || $variable == "three") 

theo cách như vậy mà biến có thể được thử nghiệm chống lại hay so với nhiều giá trị mà không lặp lại những thay đổi và điều hành mọi lúc .

Ví dụ, một cái gì đó dọc theo dòng này có thể giúp:

if ($variable == "one" or "two" or "three") 

hoặc bất cứ điều gì mà kết quả trong vòng chưa gõ.

+0

Tôi nhận ra rằng sau khi đăng. Cảm ơn cho tip, tất nhiên! – vertigoelectric

Trả lời

29

in_array() là những gì tôi sử dụng

if (in_array($variable, array('one','two','three'))) { 
+2

luôn luôn quá nhanh đối với tôi John Conde: P – brbcoding

+2

Tôi đã nhận ra điều này sau khi tôi đăng câu hỏi của mình. Đoán tôi đã nhảy súng. Đây là một giải pháp khá rực rỡ và đặc biệt hữu ích khi so sánh với nhiều thứ cùng một lúc. Cảm ơn bạn. Tôi sẽ chấp nhận nó khi trang web cho phép tôi. Nó nói tôi phải đợi. – vertigoelectric

+1

@brbcoding, tôi vẫn đánh giá cao những nỗ lực của bạn. – vertigoelectric

0
$variable = 'one'; 
// ofc you could put the whole list in the in_array() 
$list = ['one','two','three']; 
if(in_array($variable,$list)){  
    echo "yep";  
} else { 
    echo "nope";   
} 
4

Nếu không có nhu cầu xây dựng một mảng:

if (strstr('onetwothree', $variable)) 
//or case-insensitive => stristr 

Tất nhiên, về mặt kỹ thuật, điều này sẽ trở thành sự thật nếu biến là twothr, vì vậy thêm "delimiters" có thể hữu ích:

if (stristr('one/two/three', $variable))//or comma's or somehting else 
+0

Tôi nghĩ rằng bạn có một lỗi đánh máy và có nghĩa là để nói "twothr" thay vì "thothr", nhưng rõ ràng là tôi biết những gì bạn có ý nghĩa. Dù sao, đây là một chiến thuật hay khác, và trên thực tế, thậm chí còn ngắn hơn. Tôi nhận thấy bạn đã sử dụng 'strstr' lần đầu tiên và' stristr' lần thứ hai. Sự khác biệt là gì? – vertigoelectric

+0

'strstr' tìm kiếm một chuỗi _exact_ match (CaseSensitive)' stristr' với 'i' thực hiện so sánh trường hợp-insensiteve. đó là sự khác biệt duy nhất. Và vâng, đó là rác rưởi là một lỗi đánh máy: P –

+0

Ah, được rồi. Đó là những gì tôi nghĩ sự khác biệt là. Ngoài ra 'thwothr' vẫn là lỗi đánh máy XD – vertigoelectric

0

Với trường hợp chuyển đổi

switch($variable){ 
case 'one': case 'two': case 'three': 
    //do something amazing here 
break; 
default: 
    //throw new Exception("You are not worth it"); 
break; 
} 
0

Sử dụng preg_grep có thể ngắn hơn và linh hoạt hơn so với sử dụng in_array:

if (preg_grep("/(one|two|three)/i", array($variable))) { 
    // ... 
} 

Bởi vì tùy chọn ipattern modifier (i nsensitive) có thể kết hợp cả hai trường hợp trên và dưới bức thư.