web-dev-qa-db-ja.com

ifとforeachから抜け出す

Foreachループとifステートメントがあります。試合が見つかった場合、私は最終的にforeachから抜け出す必要があります。

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>
    }       
}
255
au_stan

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 はオプションの引数を取ります。これはいくつループ構造体を定義するか定義します。例:

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!


(曖昧な理由で)breakステートメント(ループ構造ではないので定義ごとに分割できない)から if にしたい場合は、単純にifを小さなループ構造にラップしてジャンプできます。そのコードブロックから。

これは完全なハックであり、通常これを実行したくないことに注意してください。

do if ($foo)
{
  // Do something first...

  // Shall we continue with this block, or exit now?
  if ($abort === true) break;

  // Continue doing something...

} while (false);

上記の例はPHP docsの コメントからの抜粋です

あなたが構文について疑問に思うなら:それは短縮された構文がここで使われているのでうまくいきます。ループ構造に含まれるステートメントはif ($foo) { .. }の1つのみであるため、外側の中括弧は省略できます。

これに対する別の例:
do $i++; while ($i < 100)do { $i++; } while ($i < 100)と同等です。

546
Kaii
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 を使用するだけです。それはそれをするでしょう。

11
Decent Dabbler

PHPで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;
2
staypuftman

ここに着陸したがインクルード文を含むループから抜け出す方法を探している人のためにbreakやcontinueの代わりにreturnを使ってください。

<?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の中にいるときに壊したいのなら、returnを使う必要があります。 breakまたはcontinueを使用すると、次のエラーが返されます。詳細を見つけました ここ

0