2012-02-19 33 views
9

मेरे पास यह स्थिति है जहां मेरे पास स्टेटस प्राप्त करने के लिए दो चेक हैं, कथन के अंदर एक स्विच स्टेटमेंट में पहला चेक करने के बाद, दूसरे चर के अंदर दूसरे स्विच स्टेटमेंट में चेक किया जाना है पहले एक मामले पाशएक अन्य स्विच स्टेटमेंट के अंदर PHP स्विच स्टेटमेंट

मैं यहाँ सटीक कोड पोस्ट नहीं कर सकते, लेकिन यहाँ एक उदाहरण है

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', '1'); 
switch($_GET['parent']){ 
    case 'child1': 
     if(!isset($_GET['child'])){ 
      echo "Only parent"; 
     } 
     else{ 
      switch($_GET['child']){ 
       case 'test': 
        echo 'test'; 
        break; 
      } 
     } 
     break; 

    case 'child2': 
     echo 'child2'; 
     break; 
    default: 
      echo $_GET['parent']; 

} 
?> 

इसके लिए इस कोड उदाहरण के साथ ठीक काम कर रहा है, लेकिन जब मैं वास्तव में मेरे सर्वर पर इस प्रक्रिया का उपयोग करें, नियंत्रण छोड़ मिल माता-पिता पर डिफ़ॉल्ट रूप से डायन बयान भले ही यह एक मिलान मामले महत्व है

कोई त्रुटि सूचना दी और cudn't डिबग इस स्तर

की तुलना में अधिक है Plz मेरी मदद कीजिए! मुझे पता है कि आप कोड देखना चाहते हैं लेकिन मैं इसे यहां पोस्ट नहीं कर सकता, कम से कम आप मुझे डीबग करने के लिए मार्गदर्शन कर सकते हैं।

धन्यवाद

+0

मुझे पैरेंट स्विच के लिए 'डिफ़ॉल्ट' केस नहीं दिख रहा है। आउटपुट के लिए आप वास्तव में क्या प्राप्त कर रहे हैं? –

+0

अच्छी तरह से मैंने यहां डिफ़ॉल्ट जोड़ा है लेकिन मैंने वास्तविक समस्या में जोड़ा है – pahnin

+0

कृपया यूआरएल पोस्ट करें क्योंकि आप इसे दर्ज कर रहे हैं, जो इस स्क्रिप्ट पर असफल रहा है। इसे 'example.com? Parent = child1' को ठीक करना चाहिए। –

उत्तर

26

PHP Documentation Examples के अनुसार, यह संभव है अगर जो नेस्टेड स्विच शामिल मामला ब्लॉक ब्रेसिज़ के साथ संलग्न है।

mentioned example का पालन करता है।

<?php 
    switch ($argc) { 
     case 'home': { 
      print('This is $argc, home case.'); 
      break; 
     } 
     case 'subsection': { 
       switch ($argd) { 
        case 'links': { 
          switch($arge) { 
           case 'display': { 
           print('This is $arge, subsection,links,display case.'); 
           break; 
           } 
          } 
        } 
       } 
     } 
    } 
?> 
2

मुझे आपके कोड में कोई त्रुटि नहीं दिखाई दे रही है। मैंने इसे अपनी मशीन पर करने की कोशिश की और यह ठीक काम करता है। चूंकि यह आपके लिए भी ठीक काम करता है, त्रुटि कहीं और कहीं होती है।

कोई कारण नहीं है नेस्टेड स्विच बयान, संभव नहीं होना चाहिए के रूप में स्विच बयान इस प्रकार के रूप में परिभाषित कर रहे हैं:

switch($variable) { 
    case "case1": 
    [statement] 
    break; 
} 

[statement] एक साधारण आदेश द्वारा बदला जा सकता है, इस तरह के रूप echo "test";, आदेशों echo "test"; echo "test"; की एक श्रृंखला या एक और स्विच स्टेटमेंट। ब्रेसिज़ जोड़ना कुछ भी नहीं बदलता है, क्योंकि ये केवल कमांड की श्रृंखला को समूहबद्ध करने के लिए काम करते हैं - ताकि if([condition]) [then] जैसी सशर्तियों में then भाग के लिए एक से अधिक कमांड का उपयोग किया जा सके। उपर्युक्त उत्तर, जो आश्चर्यजनक रूप से 18 अपवॉट्स को गलत तरीके से ब्रेसिज़ जोड़ने की सलाह देता है, कुछ भी नहीं बदलता है।

निष्कर्ष निकालने के लिए, नेस्टेड स्विच स्टेटमेंट संभव हैं और जिस तरह से आपने उन्हें अपने कोड नमूने में उपयोग किया है वह सही है। त्रुटि कहीं और है।

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