Php 继续或中断特定循环

Php 继续或中断特定循环,php,Php,我有几个循环,希望在使用break或continue指令时指定一个特定的循环 在中,我可以使用number-numeric参数来告诉它要从多少嵌套的封闭结构中分离出来 $i = 0; while (++$i) { switch ($i) { case 5: echo "At 5<br />\n"; break 1; /* Exit only the switch. */ case 10: echo "At 10

我有几个循环,希望在使用break或continue指令时指定一个特定的循环

在中,我可以使用number-numeric参数来告诉它要从多少嵌套的封闭结构中分离出来

$i = 0;
while (++$i) {
    switch ($i) {
    case 5:
        echo "At 5<br />\n";
        break 1;  /* Exit only the switch. */
    case 10:
        echo "At 10; quitting<br />\n";
        break 2;  /* Exit the switch and the while. */
    default:
        break;
    }
}
$i=0;
while(++$i){
交换机(一美元){
案例5:
回声“在5时
\n”; 断开1;/*仅退出开关*/ 案例10: 回声“在10;退出
\n”; 断开2;/*退出开关,同时退出*/ 违约: 打破 } }
但我想要更友好的东西,像这样:

$i = 0;
loop1: // Label/tag of loop1
while (++$i) {
    loop2: // Label/tag of loop2
    switch ($i) {
    case 5:
        echo "At 5<br />\n";
        break loop2;  /* Exit only the switch. */
    case 10:
        echo "At 10; quitting<br />\n";
        break loop1;  /* Exit the switch and the while. */
    default:
        break;
    }
}
$i=0;
loop1://loop1的标签/标签
while(++$i){
loop2://loop2的标签/标签
交换机(一美元){
案例5:
回声“在5时
\n”; 断开回路2;/*仅退出开关*/ 案例10: 回声“在10;退出
\n”; 断开回路1;/*退出开关,同时退出*/ 违约: 打破 } }

有可能吗?

我个人的建议是将嵌套循环代码提取到单独的方法中和/或使用异常。一般来说,“打破标签”感觉像是“转到”。我不想让你被恐龙吃掉;)

我个人的建议是将嵌套循环代码提取到单独的方法中和/或使用异常。一般来说,“打破标签”感觉像是“转到”。我不想让你被恐龙吃掉;)

这是不可能的。此外,过多的
break
-语句可能会使您的代码非常难以阅读和理解。您应该重新构造代码以避免
中断
,并使用其他代码


当然,如果您的代码仍然可读,那么使用一个、两个甚至更多的
中断
是没有问题的。但是你应该考虑是否有其他更优雅的方法来解决你的问题。大多数情况下还有更好的方法。

这是不可能的。此外,过多的
break
-语句可能会使您的代码非常难以阅读和理解。您应该重新构造代码以避免
中断
,并使用其他代码


当然,如果您的代码仍然可读,那么使用一个、两个甚至更多的
中断
是没有问题的。但是你应该考虑是否有其他更优雅的方法来解决你的问题。大多数情况下还有更好的方法。

我认为这是不可能的,但是如果您分解代码并将嵌套循环放入函数中,您可以使用
return
退出所有循环。这可能会提高可读性。

我认为这是不可能的,但如果您分解代码并将嵌套循环放入函数中,则可以使用
return
退出所有循环。这可能会提高可读性。

我建议不要中断,而是使用goto语句向上或向下跳入代码,这样会容易得多。不要使用
goto
!您可以使用标签(loopend:)使用不推荐的goto[(php5>=5.3.0,php7)在你的while循环结束时。@ElasticLamb标签的内容和goto一样,请仔细研究一下,你会明白我为什么说gotoNever使用
goto
我建议使用goto语句,而不是break,使用goto语句在代码中上下跳转,这会容易得多。不要使用
goto
!你可以使用not recommended goto[(PHP5>=5.3.0,PHP7),在while循环的末尾使用一个标签(loopend:)。@ElasticLamb标签的内容与goto的内容基本相同。请详细研究一下,你会明白我为什么说gotoNever使用
goto
do {
    $i += 1;
    if($i === 5) {
        echo "At 5<br />\n";
    } else if ($i === 10) {
        echo "At 10; quitting<br />\n";
    }
} while($i < 10);
function doSomething($i) {
    if($i === 5) {
        echo "At 5<br />\n";
    } else if ($i === 10) {
        echo "At 10; quitting<br />\n";
    }
}

function run() {
    $i = 0;
    while($i < 10) doSomething(++$i);    
}
function doSomething($i, $max) {
    if($i === 5) {
        echo "At 5<br />\n";
    } else if ($i === $max) {
        echo "At 10; quitting<br />\n";
    }
}

function run($max) {
    $i = 0;
    while($i < $max) doSomething(++$i);    
}