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>
}
}
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)
と同等です。
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
を使用するだけです。それはそれをするでしょう。
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;
ここに着陸したがインクルード文を含むループから抜け出す方法を探している人のために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を使用すると、次のエラーが返されます。詳細を見つけました ここ