ভাঙ্গা যদি এবং ভবিষ্যদ্বাণী


277

আমার একটি ফোরচ লুপ এবং যদি একটি বিবৃতি রয়েছে। যদি কোনও মিল খুঁজে পাওয়া যায় তবে আমার চূড়ান্তভাবে ভবিষ্যদ্বাণী ছাড়তে হবে।

foreach($equipxml as $equip) {
    $current_device = $equip->xpath("name");
    if ( $current_device[0] == $device ) {
        // found a match in the file            
        $nodeid = $equip->id;
        <break out of if and foreach here>
    }       
}

পিএইচপি জন্য জেএস না। আমি ধরে নিতে পারি না তারা একই রকম আচরণ করে।
অউস্তান

6
জিৎ - আমি এত বেশি jQuery ব্যবহার বন্ধ করে দিয়েছি। কেন এই ডাউনটা পেয়ে গেল? +1, পুরোপুরি যুক্তিসঙ্গত এবং ভালভাবে উত্থাপিত প্রশ্ন।
mrtsherman

11
আমি কেবল প্রশ্নটি জিজ্ঞাসা করেছি কারণ (যে কারণেই হোক) আমি পিএইচপি ব্রেক ব্রেক এবং তার উদাহরণগুলির চারপাশে আমার মাথা গুটিয়ে রাখতে পারি না। সব ভাল যদিও। আমি এখানে ব্যাজ এবং পয়েন্ট পেতে আসছি না, কেবল উত্তম উত্তর।
অউস্তান

উত্তর:


610

if লুপ কাঠামো নয়, সুতরাং আপনি "এটিকে ভেঙে ফেলতে" পারবেন না।

তবে, foreachকেবল কল করেই আপনি ভেঙে ফেলতে পারেন break। আপনার উদাহরণে এটির কাঙ্ক্ষিত প্রভাব রয়েছে:

foreach($equipxml as $equip) {
    $current_device = $equip->xpath("name");
    if ( $current_device[0] == $device ) {
        // found a match in the file            
        $nodeid = $equip->id;

        // will leave the foreach loop and also the if statement
        break;
    }
    this_command_is_not_executed_after_a_match_is_found();
}

অন্যদের সম্পূর্ণতার জন্য যারা এই প্রশ্নের উত্তর খুঁজছেন তাতে হোঁচট খায় ..

breakএকটি alচ্ছিক আর্গুমেন্ট নেয়, যা এটি নির্ধারণ করে যে এটি কতটি লুপ কাঠামো ভাঙ্গা উচিত। উদাহরণ:

foreach (array('1','2','3') as $a) {
    echo "$a ";
    foreach (array('3','2','1') as $b) {
        echo "$b ";
        if ($a == $b) { 
            break 2;  // this will break both foreach loops
        }
    }
    echo ". ";  // never reached
}
echo "!";

ফলাফল আউটপুট:

1 3 2 1!


37
+1 - অনভিজ্ঞ প্রোগ্রামারগুলির জন্য কখনও কখনও লড়াইয়ের জন্য দুর্দান্ত উদাহরণ।
জিম ডি

1
দরকারী, আপনাকে ধন্যবাদ। যুক্তি উল্লেখ করার জন্য অতিরিক্ত কর্মফল। যদিও লুপ জিনিসটি হ্যাকের মতো মনে হয়। শুধু অন্য বিবৃতি কেন অন্য একটি মোড়ক না? আমি জানি আপনি কেবল সাহায্যকারী হওয়ার চেষ্টা করছেন, তবে নবাগতদের নোট করুন।
ড্যান ব্যারন

3
আপনারা যারা এখানে অবতরণ করছেন তবে কীভাবে একটি লুপটি ভেঙে যায় তা সন্ধান করার জন্য চালিয়ে যাওয়া পরিবর্তে পরিবর্তিত স্টেটমেন্ট ব্যবহারের রিটার্ন রয়েছে।
নিক কনস্টানটাইন

কি যদি এটি একটি সুইচ বিবৃতি? স্যুইচ স্টেটমেন্টগুলি বিরতিও ব্যবহার করে। কেউ কি সহজেই সুইচের অভ্যন্তরে দুটি বিরতি স্থাপন করতে পারে যেমন {কেস "ব্রেক": প্রতিধ্বনি 'সুইচ এবং লুপটি ভাঙ্গা'; বিরতি; বিরতি; ?
জেভন

@ জ্যাভন না আপনি কেবল switch($a) { case 'x': switch($b) { case 'x': break 2; }; break; } অভ্যন্তরীণ break 2পাতাগুলি উভয়ই স্যুইচ স্টেটমেন্ট লিখতে পারবেন ।
Kaii

13
foreach($equipxml as $equip) {
    $current_device = $equip->xpath("name");
    if ( $current_device[0] == $device ) {
        // found a match in the file            
        $nodeid = $equip->id;
        break;
    }
}

সহজভাবে ব্যবহার করুন break। এটা এটা করবে।


সুতরাং বিরতি অগ্রভাগ থেকে বিরতি এবং না যদি হয়। আমি মনে করি যে আমার বিভ্রান্তিটি if ($abort_if_block) break;মূলত আমি যে বিবৃতি দিয়েছিলাম break 2তা থেকেই এটি ব্যর্থ হয়েছিল it ধন্যবাদ
au_stan

2
বিরতি নির্মাণের জন্য দেখুন। যদি আপনি ভুলে যান; এর পরে, এটি পরবর্তী অভিব্যক্তির ফলাফল পেতে পারে এবং অপ্রত্যাশিতভাবে আচরণ শুরু করতে পারে (IE আপনি যা চেয়েছিলেন তার চেয়ে অনেক বেশি লাফিয়ে বেরিয়ে আসে)। আমি জানি যে সবাই GOTO ব্যবহারের বিরুদ্ধে পরামর্শ দেয়, তবে আমি মনে করি যে, এই সমস্ত ক্ষেত্রে যখন আপনি সত্যিই বিরতি ব্যবহারের চেয়ে ভাল করতে না পারেন, তবে একটি গোটো আরও ভাল বিকল্প হতে পারে। অবশ্যই, ফরওয়ার্ড জাম্পিংয়ের জন্য (খুব বেশি দূরে নয়) কেবল এবং অপব্যবহার ছাড়াই! ;-)
মেরাস্পিন

2

পিএইচপি-তে একটি foreachবা whileলুপ ভাঙার কাছে পৌঁছানোর একটি নিরাপদ উপায় হ'ল ifমূল লুপের অভ্যন্তরে একটি বাড়ানো কাউন্টার ভেরিয়েবল এবং শর্তযুক্ত বাসা বাঁধে । এটি আপনাকে কঠোর নিয়ন্ত্রণ দেয় break;যার চেয়ে জটিল পৃষ্ঠায় অন্য কোথাও বিপর্যয় ঘটতে পারে।

উদাহরণ:

// Setup a counter
$ImageCounter = 0;

// Increment through repeater fields
while ( condition ):
  $ImageCounter++;

   // Only print the first while instance
   if ($ImageCounter == 1) {
    echo 'It worked just once';
   }

// Close while statement
endwhile;

বাক্য গঠনটি সঠিক নয়। আপনি যদি endwhileবিবৃতিটি ব্যবহার করতে চান তবে আপনাকে লিখতে হবে while (..): ...; endwhile;- পরে কোলনটি নোট করুন while!
কাই

0

আপনারা যারা এখানে অবতরণ করছেন তবে কীভাবে কোনও লুপটি ভেঙে যেতে চান যা এতে অন্তর্ভুক্ত বিবৃতি ব্যবহারের বিরতি বা চালিয়ে যাওয়ার পরিবর্তে ফিরে আসে।

<?php

for ($i=0; $i < 100; $i++) { 
    if (i%2 == 0) {
        include(do_this_for_even.php);
    }
    else {
        include(do_this_for_odd.php);
    }
}

?>

Do_this_for_even.php এর ভিতরে থাকা অবস্থায় যদি আপনি ব্রেক করতে চান তবে আপনাকে রিটার্ন ব্যবহার করতে হবে। বিরতি বা চালিয়ে যাওয়া ব্যবহার করা এই ত্রুটিটি ফিরিয়ে দেবে: 1 স্তর ভাঙ্গতে / চালিয়ে যেতে পারে না। আমি আরো বিবরণ পেয়েছি তা এখানে

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