二重ループを一気に抜けるにはラベル付きbreakの代わりに「break 2」またはgoto演算子を使う

スポンサーリンク

ループの中でbreak文を使うと、そのループを抜けることができますが、二重ループの内側でbreakを使うと、内側のループを抜けるだけです。

<?php
for ($i = 1; $i < 5; $i++) {
    for ($j = 1; $j < 5; $j++) {
        echo "{$i}{$j} ";
        if ($j >= 2) {
            break;
        }
    }
}
?>
break文の使用例

break文の使用例

Javaなどのように「break ラベル;」と、移動先のラベルを指定できないので、PHPで二重ループを一気に抜けたい場合、抜けるループの数を示すパラメータを指定する方法があります。たとえば、二重ループを抜けたい場合、「break 2」のように記述します。

<?php
for ($i = 1; $i < 5; $i++) {
    for ($j = 1; $j < 5; $j++) {
        echo "{$i}{$j} ";
        if ($j >= 2) {
            break 2;
        }
    }
}
?>
break文で二重ループを抜ける

break文で二重ループを抜ける

PHP5.4.0からは、「break $num;」のように抜ける数に変数を指定できなくなりました。古いバージョンで動的に抜ける数を設定している場合は注意してください。

PHP 5.3.0からはgoto演算子を使うことができます。goto演算子では、次のように指定したラベルに移動することで二重ループを抜けることができます。逆にループの中にgoto演算子で移動することはできません。

<?php
for ($i = 1; $i < 5; $i++) {
    for ($j = 1; $j < 5; $j++) {
        echo "{$i}{$j} ";
        if ($j >= 2) {
            goto label1;
        }
    }
}

label1:
echo "終了";
?>
goto演算子による二重ループからの脱出

goto演算子による二重ループからの脱出

PHPの基礎が身に付いたかチェックするなら

PHP「直す力」養成ドリル
スポンサーリンク