PHPプログラミングにおいて、foreach文のループを途中で終了させるにはbreakを使います。breakは知っていても、普段は使わない人も多いのではないでしょうか?
本記事では、breakを使ってforeachのループ処理を終了させる方法やbreakの注意点などを紹介しています。この機会に、ぜひ一度ご覧ください。
目次
PHPのforeach文の使い方
PHPでは、foreach文を使って配列の要素数分、処理を繰り返すことができます。
foreach文の書き方は次の通りです。
1 2 3 |
foreach( 配列 as 変数){ ループ処理 } |
for文やwhile文でループ処理を書く場合、終了させるための条件式が必要です。しかし、foreach文では配列の要素数分だけ処理を繰り返してくれるので、条件式を考える必要がありません。
その使いやすさから、PHPプログラミングのループ処理では、foreach文が最も多く利用されているといっても過言ではないでしょう。
breakでforeachのループを終了する
PHPのforeach文は、breakを使うことでループ処理を終了することができます。
breakを使用する方法は次の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php $num = ['1111','2222','3333']; foreach ($num as $a){ if ($a == '2222'){ break; //ループ終了 } echo $a; //出力 echo '<br />'; } ?> |
上記サンプルコードでは、変数numに3つの文字列が格納されていましたが、2つ目の文字列を処理している途中に、breakでループ処理を終了しました。
そのため、出力されたのは、1つ目の文字列のみという結果になりました。
continueとの違いとは?
PHPのループ処理で使用されるものとして、breakとセットで覚えておきたいのがcontinueです。
breakはループ処理自体を終了させますが、continueは次のループにスキップするという違いがあります。
実際に処理の違いを見比べた方がわかりやすいと思うので、breakとcontinueの違いをサンプルコードを使って確認してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<?php $num = ['1111','2222','3333']; echo '【breakの場合】'; echo '<br />'; foreach ($num as $a){ if ($a == '2222'){ break; //ループを終了する } echo $a; //出力 echo '<br />'; } echo '<br />'; echo '【continueの場合】'; echo '<br />'; foreach ($num as $a){ if ($a == '2222'){ continue; //ループをスキップする } echo $a; //出力 echo '<br />'; } ?> |
1111
【continueの場合】
1111
3333
上記サンプルコードの通り、変数numに格納された文字列は、breakでは1つ目の文字列のみ出力されましたが、continueでは1つ目と3つ目の文字列が出力されました。
レベル指定のbreakでforeachのループを終了する
PHPでは、breakの引数にレベルを指定することで、多重構造(ネスト)になっているループ処理の終了する階層を決めることができます。
まずは、breakの引数に「1」を指定した場合の動作を確認してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?php $num1 = ['1','11','111']; $num2 = ['2','22','222']; $num3 = ['3','33','333']; foreach ($num1 as $a){ echo $a; foreach ($num2 as $b){ echo $b; foreach ($num3 as $c){ if ($c == '33'){ break 1; } echo $c; } } echo '<br />'; } ?> |
11232232223
111232232223
上記サンプルコードでは、変数num3に格納された「33」のループ処理時に1階層分のループを終了しました。なお、breakに引数を指定しなかった場合も同じ動作になります。
次に、breakの引数に「2」を指定した場合の動作も確認してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?php $num1 = ['1','11','111']; $num2 = ['2','22','222']; $num3 = ['3','33','333']; foreach ($num1 as $a){ echo $a; foreach ($num2 as $b){ echo $b; foreach ($num3 as $c){ if ($c == '33'){ break 2; } echo $c; } } echo '<br />'; } ?> |
1123
11123
上記サンプルコードの通り、今回は2階層分のループを終了したので変数num2と変数num3のループ処理が途中で中断されています。一方、3階層目にあたる変数num1のループ処理は、中断されずに最後まで処理されました。
最後に、breakの引数に「3」を指定した場合の動作も確認してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?php $num1 = ['1','11','111']; $num2 = ['2','22','222']; $num3 = ['3','33','333']; foreach ($num1 as $a){ echo $a; foreach ($num2 as $b){ echo $b; foreach ($num3 as $c){ if ($c == '33'){ break 3; } echo $c; } } echo '<br />'; } ?> |
上記サンプルコードの通り、今回は3階層分のループを終了したので、breakが行われた時点で全てのforeach文のループ処理が終了しました。
breakを使うときは階層に注意する
breakが使われる処理で多いのは、エラー処理などの不測の事態が発生した場合です。このとき、breakで上手くループを終了させることができなければ、不具合が発生した状態で、別の処理を走らせるということになってしまいます。しかも、正常な状態では実行されない処理なので、気づかないことも多いです。
そのため、breakを使うループ処理の動作確認は十分行うようにしましょう。特に、多重構造のループ処理では、階層を意識してbreakを使う必要があります。そして、breakの引数を指定しなかった場合、レベル「1」を指定した状態だと理解しておきましょう。
まとめ
PHPプログラミングのforeach文で、ループ処理を途中終了させたい場合には、breakを使います。似たような機能をもつcontinueとは、次のループ処理に対する動作が異なります。違いをしっかりと理解しておきましょう。
また、多重構造になっているループ処理の場合、breakの引数にレベルを指定してループを終了させます。引数を指定しなかった場合は、1階層分のループ処理を終了させるという点に注意が必要です。
breakは、エラー処理などの重要な処理で使われます。動作確認を十分に行って、不具合のないように注意しましょう。