如果和foreach分离
我有一个foreach循环和一个if语句。 如果find一场比赛,我需要最终摆脱这个问题。
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
不是一个循环结构,那么你不能“突破它”。
但是,你可以通过简单的break
rest来摆脱这个foreach
。 在你的例子中,它具有预期的效果:
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
需要一个可选的参数,它定义了多less个循环结构。 例:
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文档中的评论
如果您想知道这个语法:这是因为在这里使用缩写语法。 因为循环结构只包含一个语句,所以可以省略外面的花括号: if ($foo) { .. }
。
另一个例子是:
do $i++; while ($i < 100)
do $i++; while ($i < 100)
相当于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
循环的一种更安全的方法是嵌套一个递增的计数器variables, if
条件在原始循环内。 这使你比break;
更严格的控制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;