PHPのbreakの使い方について書いています。
最初にbreakについて解説して、その後に下記のことについて書きました。
・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を使うと、ループの処理を抜ける。
・foreachでもbreakを使うことができる。
・深い階層で使った時でも、使った箇所のループのみを抜ける。
・breakとcontinueは違う。breakは処理を抜けて、continueはループの先頭に戻って処理を続ける。
コメント