2010-11-05 9 views
10

में एकाधिक मानों की तुलना मैं इस से जाने के लिए करना चाहते हैं:पीएचपी

if($var == 3 || $var == 4 || $var == 5 || $var =='string' || $var == '2010-05-16') { execute code here }

इस के लिए

:

if($var == (3, 4, 5, 'string', '2010-05-16')) {execute code here }

बहुत बेमानी लगता टाइपिंग $ वर रखने के लिए, और मुझे लगता है यह इसे पढ़ने के लिए थोड़ा बोझिल बनाता है। क्या इस तरह से इसे सरल बनाने के लिए PHP में कोई तरीका है? मैं यहाँ एक पोस्ट पर पढ़ा है कि जब XQuery का उपयोग कर आप $ वर के रूप में = ऑपरेटर का उपयोग कर सकते हैं = (1,2,3,4,5) आदि

धन्यवाद, जॉन

उत्तर

26

मानों को एक सरणी में रखें, फिर यह जांचने के लिए in_array() में फ़ंक्शन का उपयोग करें कि वे मौजूद हैं या नहीं।

$checkVars = array(3, 4, 5, "string", "2010-05-16"); 
if(in_array($var, $checkVars)){ 
    // Value is found. 
} 

+0

पहले प्रतिक्रियाओं में से एक, अच्छा समाधान, और मैनुअल के लिए एक लिंक भी शामिल है। धन्यवाद! – John

+2

[PHP 5.4 के रूप में आप शॉर्ट सरणी वाक्यविन्यास का भी उपयोग कर सकते हैं, जो \ [\]] (http://www.php.net/manual/en/language.types.array.php) के साथ सरणी() को प्रतिस्थापित करता है, तो बस 'अगर (in_array ($ var, [3,4,5, "string", "2010-05-16"])) {...}' पर्याप्त है। –

+0

PHP 5.4 _replace_ 'array()' '[]' – Greg

2

या आप उपयोग कर सकते हैं in_array()

if(in_array($var,array(4,5,'string','2010-05-16',true)) { 

} 
4

आप in_array() उपयोग कर सकते हैं।

if (in_array($var, array(3,4,5,"string","2010-05-16"))) { .... } 
0
$vals = array (3, 4, 5, 'string', '2010-05-16'); 
if(in_array($var, $vals)) { 
    //execute code here 
} 
5
if (in_array($var, array(3, 4, 5, 'string', '2010-05-16'))) {execute code here } 

या, वैकल्पिक रूप से, एक स्विच ब्लॉक:

switch ($var) { 
    case 3: 
    case 4: 
    case 5: 
    case 'string': 
    case '2010-05-16': 
     execute code here; 
     break; 
} 
+0

के साथ पहला समाधान उत्कृष्ट नहीं है।दूसरा विकल्प यहां काम करता है, जैसे कि अगर मैंने कथन का प्रस्ताव दिया है, लेकिन यह उतना ही बोझिल है जितना मैं मानता हूं। कई बार $ var टाइप करने के बजाय, कई बार केस टाइप करना होगा। जवाब के लिए धन्यवाद! – John

7

आप बहुत बार इस जाँच करने के लिए की जरूरत है और आप अच्छा प्रदर्शन की जरूरत है, डॉन ' एक धीमी सरणी खोज का उपयोग नहीं करें, बल्कि इसके बजाय एक तेज हैश तालिका लुकअप का उपयोग करें:

$vals = array(
    1 => 1, 
    2 => 1, 
    'Hi' => 1, 
); 

if (isset($vals[$val])) { 
    // go! 
} 
+1

यह एक बहुत ही रोचक समाधान है। गति की तुलना करने के लिए मुझे एक स्क्रिप्ट या दो चलाने होंगे, क्योंकि अब मैं बहुत उत्सुक हूं। – John

+2

हम्मम्म ... 6 साल बाद और कोई निष्कर्ष नहीं? एक को संदेह करना शुरू होता है कि कोड बहुत धीमा होना चाहिए। :-) –

0

मैं इस समस्या थी और इस समारोह बनाकर इसका समाधान कर लिया:

function orEquals(){ 
    $args = func_get_args(); 

    foreach($args as $arg){ 
     if ($arg != $args[0]){ 
      if($arg == $args[0]){ 
       return true; 
       break; 
      } 
     } 
    } 
    unset($args); 
} 

तो आप सिर्फ इस तरह फ़ंक्शन को कॉल कर सकते हैं:

if(orEquals($var, 3, 4, 5, 'string', '2010-05-16')){ 
//your code here 
} 
1

बस एक वैकल्पिक समाधान देने के लिए in_array के उपयोग के लिए:

कुछ मामलों में यह एक सरणी सेट करने के लिए तेज़ हो सकता है जहां मान कुंजी हैं और फिरके साथ जांचें

उदाहरण:

$checkVars= [3 => true, 
      4 => true, 
      5 => true, 
      "string" => true, 
      "2010-05-16" => true]; 

if(isset($checkVars[$var]) 
{ 
    // code here 
} 

संपादित: मैं कुछ परीक्षण किया है और ऐसा लगता है कि इस विधि तेजी से ज्यादातर मामलों में है।