PHPのbreakの使い方!サンプル4つ!(ループを抜ける)

PHP

PHPのbreakの使い方について書いています。
最初にbreakについて解説して、その後に下記のことについて書きました。

・breakをforeachで使う
・breakを深い階層で使ったとき
・breakとcontinueの違い

載せているコードはPHPのバージョン8.1.12で動作確認しました。

breakの使い方

breakを使うと、ループの途中で処理を抜けることができます。
例えば、下記のように使うことができます。

<?php
for ($i = 0; $i < 6; $i++) {
    if ($i === 3) {
        break;
    }
    echo $i."\n";
}

for文でループ処理するようにしました。
変数$iが「0」から「5」までの6回繰り返します。

ループ処理の中で、変数$iが「3」のときにbreakを使って、処理を抜けるようにしました。
ループ処理の最後に、変数$iを出して改行するようにしています。

プログラムを実行して、出力結果を確認すると、下記のようになりました。

0
1
2

変数$iが「3」のときにbreakでループ処理を抜けるので、0から2の出力で処理が終わっています。
このようにbreakを使うと、ループ処理の途中で抜けることができます。

breakをforeachで使う

breakをforeachのループ処理の中で使ってみました。

$fruits = ['apple', 'banana', 'orange', 'grape', 'peach'];

foreach ($fruits as $fruit) {
    if ($fruit === 'orange') {
        break;
    }
    echo $fruit."\n";
}

最初に$fruits変数に、5つの果物名で配列を作成しました。

次に作った配列を使って、foreach文でループしています。
$fruit変数に、ループするたびに配列の要素が入ってきます。

ループの中の処理で、$fruit変数が「orange」だったときに、breakでループを抜けるようにしました。
ループ処理の最後に、$fruit変数を出力するようにしています。

プログラムを実行すると、下記が出力されました。

apple
banana

$fruit変数が「orange」のときに、breakでループを抜けて処理が終わったことが確認できました。

breakを2階層など深い階層で使う

for文など、ループ処理をネストして、break深い階層で使ったときです。
このときには、breakを使ったループ処理のみを抜けます。

例えば、下記のように2重ループを書いて、2つ目の階層でbreakします。

for ($i = 0; $i < 3; $i++) {
    for ($j = 0; $j < 5; $j++) {
        if ($j === 3) {
            break;
        }
        echo "i:{$i} j:{$j}\n";
    }
}

変数$iの箇所のループが0から2までの3回繰り返します。
変数$jの箇所のループは0から4までの5回繰り返します。

変数$jが「3」だったときにbreakを呼んで、処理を抜けるようにしました。
こうするとbreakしたときに、変数$jの箇所のループのみを抜けて、1段目のループの先頭に戻ります。

変数$jは0から4まで繰り返されるはずですが、「3」のときに抜けるので、0から2までの3回だけしか繰り返されません。
変数$iの箇所は抜けないので、3回繰り返されます。

実行して、結果を確認すると、下記のようになりました。

i:0 j:0
i:0 j:1
i:0 j:2
i:1 j:0
i:1 j:1
i:1 j:2
i:2 j:0
i:2 j:1
i:2 j:2

変数$jの箇所のループだけ、breakしているので、途中で抜けたことが確認できました。
3階層などになっても同じで、breakを使われた箇所のループのみを抜けます。

breakとcontinueの違い

breakは処理を抜けましたが、continueはループの先頭に戻って処理を継続します。
下記は同じ繰り返し処理です、breakとcontinueの処理だけを変えて、挙動を確認してみました。

breakのとき

例えば、下記のようにbreakを使います。

$drinks = ['water', 'wine', 'coffee', 'cola', 'beer'];

foreach ($drinks as $drink) {
    if ($drink === 'coffee') {
        break;
    }
    echo "{$drink}\n";
}

最初に変数$drinksに5つ文字列で、配列を作りました。

その後にforeach文でループ処理をしています。
ループの中で、$drink変数が「coffee」だったらbreakするようにしました。

ループの最後にechoで、$drink変数の中身を出力するようにしています。
実行して、結果を確認すると、下記のようになります。

water
wine

変数が「coffee」のときにbreakしたので、処理が終わっています。

continueのとき

同じプログラムのbreakの箇所をcontinueに変えてみました。

$drinks = ['water', 'wine', 'coffee', 'cola', 'beer'];

foreach ($drinks as $drink) {
    if ($drink === 'coffee') {
        continue;
    }
    echo "{$drink}\n";
}

こうすると$drink変数が「coffee」だったときに、ループの先頭に戻って、後続の処理をスキップします。
そして、また先頭から処理が最後まで続きます。

そのため、出力結果は下記のようになります。

water
wine
cola
beer

$drink変数が「coffee」のときにcontinueして、ループの先頭に戻ります。
$drink変数には、次の「cola」が代入されて処理が続きます。
結果、「coffee」だけ出力されませんでした。

このようにbreakでは処理を抜けますが、continueはループの先頭に戻って、後続の処理をスキップします。

終わりに

今回はPHPのbreakの使い方について書きました。

内容をまとめると、下記のようになります。

・breakはループの途中で使う。
・breakを使うと、ループの処理を抜ける。
・foreachでもbreakを使うことができる。
・深い階層で使った時でも、使った箇所のループのみを抜ける。
・breakとcontinueは違う。breakは処理を抜けて、continueはループの先頭に戻って処理を続ける。

コメント

タイトルとURLをコピーしました