क्या आप PHP में एक पाश से बाहर निकल सकते हैं?


118

मेरे पास एक लूप है जो मेरे PHP कोड में कुछ त्रुटि की जाँच कर रहा है। मूल रूप से यह कुछ इस तरह दिखता था ...

foreach($results as $result) {
    if (!$condition) {
        $halt = true;
        ErrorHandler::addErrorToStack('Unexpected result.');
    }

    doSomething();
 }

if (!$halt) {
    // do what I want cos I know there was no error
}

यह सभी अच्छी तरह से और अच्छा काम करता है, लेकिन यह एक त्रुटि के बाद भी इसके माध्यम से लूपिंग है। क्या लूप से बचने का कोई तरीका है?

जवाबों:


211

आप ब्रेक स्टेटमेंट की तलाश में हैं।

$arr = array('one', 'two', 'three', 'four', 'stop', 'five');
while (list(, $val) = each($arr)) {
    if ($val == 'stop') {
        break;    /* You could also write 'break 1;' here. */
    }
    echo "$val<br />\n";
}

13
@ गैब्रिएल, यह प्रश्न का उत्तर देता है, कोड नमूना वास्तव में एक नमूना है। आप गैर-वर्णनात्मक "$ गिरफ्तार" सरणी नाम के बारे में शिकायत कर सकते हैं।
paxdiablo

5
@ गैब्रिएल: मैं PHP मैनुअल में सीधे संदर्भित कोड पोस्ट कर रहा हूं, और यह सही ढंग से ब्रेक स्टेटमेंट के उपयोग को दर्शाता है।
theTXI

@Pax, मेरे लिए व्यक्तिपरक है, हर बार जब मैंने एक उदाहरण रखा तो मैंने एक वास्तविक विश्व कोड डालने की कोशिश की।
गैब्रियल सोसा

1
@ गैब्रिएल: आपने एक उदाहरण बिल्कुल भी पोस्ट नहीं किया, और आपके द्वारा दिया गया लिंक ठीक उसी स्रोत पर जाता है जिसकी मैंने आपूर्ति की थी (जो कि नमूना कोड बहुत ऊपर से आता है)। आपने मूल रूप से वही काम किया था जो मैंने किया था, लेकिन इसे ओपी ने नमूना देखा नहीं होगा जब तक कि वह लिंक पर क्लिक नहीं करता।
theTXI

3
हालांकि यह एक अजीब तरीका है!
एलेक्स

151

जैसा कि अन्य पोस्ट में कहा गया है, आप ब्रेक कीवर्ड का उपयोग कर सकते हैं। एक बात जिस पर संकेत दिया गया था, लेकिन यह नहीं बताया गया है कि कीवर्ड PHP को यह बताने के लिए एक संख्यात्मक मान ले सकता है कि कितने स्तरों से तोड़ना है।

उदाहरण के लिए, यदि आपके पास सूचना के एक टुकड़े को खोजने की कोशिश में एक दूसरे के पास तीन फॉरेस्ट लूप हैं, तो आप तीनों नेस्टेड लूप से बाहर निकलने के लिए 'ब्रेक 3' कर सकते हैं। यह 'फॉर', 'फॉर्च्यूनर', 'जबकि', 'डू-एसे' या 'स्विच' स्ट्रक्चर के लिए काम करेगा।

$person = "Rasmus Lerdorf";
$found = false;

foreach($organization as $oKey=>$department)
{
   foreach($department as $dKey=>$group)
   {
      foreach($group as $gKey=>$employee)
      {
         if ($employee['fullname'] == $person)
         {
            $found = true;
            break 3;
         }
      } // group
   } // department
} // organization

5
अच्छी बात। यह शीर्ष के पास PHP मैनुअल में बहुत स्पष्ट रूप से समझाया गया है। मुझे नहीं लगता कि यह इस विशेष प्रश्न के लिए जरूरी था, लेकिन यह जानना अभी भी बहुत अच्छा है। +1
TheTXI

46

break; अपने पाश छोड़ देता है।

continue; उस लूप के शेष के लिए किसी भी कोड को छोड़ देता है और अगले लूप पर चला जाता है, जब तक कि स्थिति अभी भी सही है।


बस मुझे क्या चाहिए .. कि केवल चालू लूप को तोड़ने के लिए "जारी रखें" और ब्रेक के रूप में पूरे लूप को नहीं छोड़ना चाहिए।
। किलिआन लिंडबर्ग


4

ये सभी अच्छे उत्तर हैं, लेकिन मैं एक और सुझाव देना चाहूंगा कि मुझे लगता है कि यह एक बेहतर कोड मानक है। आप लूप स्थिति में एक ध्वज का उपयोग करना चुन सकते हैं जो इंगित करता है कि लूपिंग जारी रखना है या नहीं और breakसभी को एक साथ उपयोग करने से बचें ।

$arr = array('one', 'two', 'three', 'four', 'stop', 'five');
$length = count($arr);
$found = false;
for ($i = 0; $i < $length && !$found; $i++) {
    $val = $arr[$i];
    if ($val == 'stop') {
        $found = true; // this will cause the code to 
                       // stop looping the next time 
                       // the condition is checked
    }
    echo "$val<br />\n";
}

मैं इसे बेहतर कोड प्रैक्टिस मानता हूं क्योंकि यह उस स्कोप पर निर्भर नहीं करता है breakजो इस्तेमाल किया जाता है। बल्कि, आप एक चर को परिभाषित करते हैं जो इंगित करता है कि एक विशिष्ट लूप को तोड़ना है या नहीं। यह उपयोगी है जब आपके पास कई छोरें होती हैं जो घोंसले या अनुक्रमिक नहीं हो सकती हैं या नहीं।


3
$arr = array('one', 'two', 'three', 'four', 'stop', 'five');
foreach ($arr as $val) {
    if ($val == 'stop') {
        break;    /* You could also write 'break 1;' here. */
    }
    echo "$val<br />\n";
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.