PHP中for和foreach如何跳出循环

方法一:exit或die,die是exit的别名

<?php
$arr = ['aaa','bbb','ccc','ddd','eee','fff','ggg'];
$num = 'ddd';
for ($i = 0; $i < count($arr); $i++){
    if($num == $arr[$i]){
        exit;
        //die;
    }
    var_dump("第".$i."循环中");
}

方法二:break

<?php
$arr = ['aaa','bbb','ccc','ddd','eee','fff','ggg'];
$num = 'ddd';
for ($i = 0; $i < count($arr); $i++){
    if($num == $arr[$i]){
        break;
    }
    var_dump("第".$i."循环中");
}

方法三:return

<?php
$arr = ['aaa','bbb','ccc','ddd','eee','fff','ggg'];
$num = 'ddd';
for ($i = 0; $i < count($arr); $i++){
    if($num == $arr[$i]){
        return;
    }
    var_dump("第".$i."循环中");
}

不管是for循环还是foreach循环,以上三种方法都能得到如下结果

上面展示的只是跳出一层循环,如果是两层循环,效果如何呢

for($i = 1; $i <= 10; $i++){
    for($j = 1; $j <= 10; $j++){
        $m = $i*$j;
        if($m == 49){
            return;
        }
        var_dump("这是第二层".$j);
    }
    var_dump("---------------------------这是第一层".$i);
}
for($i = 1; $i <= 10; $i++){
    for($j = 1; $j <= 10; $j++){
        $m = $i*$j;
        if($m == 49){
            exit;
        }
        var_dump("这是第二层".$j);
    }
    var_dump("---------------------------这是第一层".$i);
}

return和exit,在条件满足的情况下,都能直接跳出两层循环,效果如下

而break,却只能跳出当前循环

for($i = 1; $i <= 10; $i++){
    for($j = 1; $j <= 10; $j++){
        $m = $i*$j;
        if($m == 49){
            break;
        }
        var_dump("这是第二层".$j);
    }
    var_dump("---------------------------这是第一层".$i);
}

效果如下

对于一些特定场景,可以用到break,跳出内层循环,继续执行外层循环。

如果想直接退出两层循环,break也是可以做到的。

for($i = 1; $i <= 10; $i++){
    for($j = 1; $j <= 10; $j++){
        $m = $i*$j;
        if($m == 49){
            break 2;
        }
        var_dump("这是第二层".$j);
    }
    var_dump("---------------------------这是第一层".$i);
}

只需要break 2,就能跳出两层循环