আপনি কি পিএইচপি-তে কোনও লুপ 'প্রস্থান' করতে পারবেন?


118

আমার একটি লুপ রয়েছে যা আমার পিএইচপি কোডে কিছু ত্রুটি করে যাচ্ছিল। মূলত এরকম কিছু লাগছিল ...

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
@ গ্যাব্রিয়েল, এটি প্রশ্নের উত্তর দেয়, কোড নমুনা ঠিক এটি, একটি নমুনা। আপনি বর্ণনাতীত "$ আরর" অ্যারের নামটি সম্পর্কে ঠিক একই অভিযোগ করতে পারেন।
প্যাক্সিডিয়াবলো

5
@ গ্যাব্রিয়েল: আমি পিএইচপি ম্যানুয়ালিতে সরাসরি রেফারেন্স কোড পোস্ট করছি এবং এটি ব্রেক স্টেটমেন্টের ব্যবহারটি সঠিকভাবে দেখায়।
TheTXI

@ প্যাক্স, আমার জন্য বিষয়গত, এটি প্রতিবারই আমি উদাহরণ স্থাপন করার সময় আমি একটি বাস্তব বিশ্ব কোড রাখার চেষ্টা করেছি।
গ্যাব্রিয়েল সোসা

1
@ গ্যাব্রিয়েল: আপনি মোটেও উদাহরণ পোস্ট করেননি এবং আপনি যে লিঙ্কটি দিয়েছেন তা হুবহু একই উত্সে সরবরাহ করেছিল (এটি যেখানে নমুনা কোডটি একেবারে শীর্ষে আসে)। আপনি মূলত আমার মতো একই জিনিস করেছিলেন তবে এটি তৈরি করেছেন যাতে লিঙ্কটি ক্লিক করার পরে ওপি নমুনাটি দেখতে পাবে না।
TheTXI

3
যে হয় লুপ তবে করার জন্য একটি অদ্ভুত উপায়!
অ্যালেক্স

151

অন্যান্য পোস্টে যেমন বলা হয়েছে, আপনি ব্রেক শব্দটি ব্যবহার করতে পারেন। একটি জিনিস যা ইঙ্গিত করা হয়েছিল তবে ব্যাখ্যা করা হয়নি তা হ'ল কীওয়ার্ড পিএইচপি কে কতগুলি স্তর ভেঙে যেতে হবে তা জানাতে একটি সংখ্যাসূচক মান নিতে পারে।

উদাহরণস্বরূপ, যদি আপনি তিনটি ফোরচ লুপগুলি একে অপরের কাছে কিছু তথ্য খোঁজার চেষ্টা করে থাকেন তবে তিনটি নেস্টেড লুপ থেকে বেরিয়ে আসতে আপনি 'ব্রেক 3' করতে পারেন। এটি 'for', 'foreach', 'while', 'do-while', বা 'স্যুইচ' কাঠামোর জন্য কাজ করবে।

$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
ভাল যুক্তি. এটি শীর্ষে পিএইচপি ম্যানুয়ালটিতে বেশ স্পষ্টভাবে ব্যাখ্যা করা হয়েছে is আমি মনে করি না যে এটি এই বিশেষ প্রশ্নের জন্য অপরিহার্য ছিল, তবে এটি এখনও জেনে রাখা ভাল। +1
থিটিএক্সআই

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";
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.