2014-07-17 12 views
16

में तुलना ऑपरेटर का उपयोग करना, इसलिए मेरे पास चार स्थितियां हैं जिन्हें मुझे जाने की आवश्यकता है और मैंने सोचा कि PHP में switch कथन का उपयोग करना सबसे अच्छा होगा। हालांकि, मुझे यह जांचने की ज़रूरत है कि एक पूर्णांक है, मान लें, कम या बराबर, या उससे अधिक और बराबर।PHP स्विच

switch ($count) { 
    case 20: 
     $priority = 'low'; 
     break; 

    case 40: 
     $priority = 'medium'; 
     break; 

    case 60: 
     $priority = 'high'; 
     break; 

    case 80: 
     $priority = 'severe'; 
     break; 
} 

एक if() बयान तो वह ऐसा दिखाई होता है:

if ($count <= 20) { 
    $priority = 'low'; 
} 

if ($count <= 40) { 
    $priority = 'medium'; 
} 

switch-case में है कि संभव है?

+6

अच्छी तरह से आप 'स्विच (सत्य)' कर सकते हैं और उन मामलों पर सत्य लौट सकते हैं जो सीमा [उदाहरण] (http://stackoverflow.com/a/8876696/2344142) को संतुष्ट करते हैं। यदि यह एक छोटे पैमाने पर था, तो आप केवल संख्याओं को श्रेणी में दोहरा सकते हैं, और उन्हें एक-दूसरे में बदल सकते हैं [उदाहरण] (http://stackoverflow.com/a/4163212/2344142)। लेकिन हाँ, आपके उदाहरण के लिए, आपको एक कथन का उपयोग करना चाहिए। –

+3

अपने –

+0

@DaveChen के साथ छड़ी एक अच्छी चाल है। – Havenard

उत्तर

57

एक इस समस्या को हल करने के लिए और अधिक सामान्य मामला है:

switch (true) { 
    case $count <= 20: 
     $priority = 'low'; 
     break; 

    case $count <= 40: 
     $priority = 'medium'; 
     break; 

    case $count <= 60: 
     $priority = 'high'; 
     break; 

    default: 
     $priority = 'severe'; 
     break; 
} 
2

सं। switch() कथन एकाधिक समानता परीक्षण करने के लिए हैं। वे मूल रूप से सिर्फ एक से थोड़ा पढ़ने में आसान (लेकिन यह भी ज्यादा खतरनाक)

if (x == 'a') { ... } 
else if (x == 'b') { ... } 
else if (x == 'c') { ... } 

कोड के संस्करण रहे हैं। switch()== से < या किसी अन्य तुलना ऑपरेटर से दूर करने का कोई तरीका नहीं है। यह समानता परीक्षण के लिए सख्ती से है।

+0

@ कोनर नेस समाधान के साथ क्या गलत है? –

1

स्विच ऐसा नहीं कर सकते, लेकिन इस विशेष मामले में आप कुछ इस तरह कर सकते हैं:

switch ((int)(($count - 1)/20)) { 
    case 0: 
     $priority = 'low'; 
     break; 
    case 1: 
     $priority = 'medium'; 
     break; 
    case 2: 
     $priority = 'high'; 
     break; 
    case 3: 
     $priority = 'severe'; 
     break; 
} 
(int)(($count - 1)/20) में

तो 0 से 20 से सभी मूल्यों को 0 पर eval जाएगा, 21 से 40 के लिए eval होगा 1 और इसी तरह, आपको इस उद्देश्य के लिए स्विच स्टेटमेंट का उपयोग करने की इजाजत दी गई है।

और क्योंकि हम मान श्रृंखलाबद्ध रहे हैं, हम भी एक सरणी के लिए आसान बनाने में कर सकते हैं:

$priorities = ['low', 'medium', 'high', 'severe']; 
$priority = $priorities[(int)(($count - 1)/20)]; 
1

एक तरीका है कि में काम करता है नहीं है टर्नरी असाइनमेंट ऑपरेटर का उपयोग कर php 7। ऑपरेटर को पहले (5.4?) पर पेश किया गया था, लेकिन मैंने कभी भी अन्य संस्करणों पर कोड का परीक्षण नहीं किया। मैंने पूरे स्विच कोड there लिखा, हालांकि यहां संक्षिप्तता के लिए केवल विशिष्ट खंड है। मान लीजिए कि हम हालत से पांच से ज्यादा या बराबर सभी नंबरों के लिए मैच के लिए चाहते हैं:

switch($value){ 
case ($value >= 5?$value:!$value)://do something here 
break; 
}  

हम या तो $ मूल्य अपरिवर्तित से गुजरने की अनुमति या हम स्थिति के अनुसार मूल्य नकारना। एक $ मूल्य हमेशा मेल खाता है या इसकी अस्वीकृति के खिलाफ परीक्षण में विफल रहता है।

+0

पुष्टि कर सकता है कि यह दृष्टिकोण कम से कम PHP 5.5 पर वापस काम करता है –

संबंधित मुद्दे