PHPでプログラミングをしていて、ループ内でbreak文やcontinue文を記載しているソースを結構見かけることがあると思います。
意識していないとcontinue文とbreak文で、なにが違ったっけと思うことがあったりするので、今回の記事では、continue文とbreak文の使用方法について紹介します。
Contents
break文とcontinue文の簡単なイメージ
PHPでのbreakとcontinueの簡単なイメージをプログラムで記載すると下記のようになります。
while ($foo) { <-----------------------------------------┐ continue; --- continue文は下の処理をスキップして、頭に戻る --┘ break; ----- break文はループを抜ける ----------------┐ } | <-----------------------------------------┘
continue文の例
continueで処理をスキップする
PHPでプログラミングをしている中で、for, foreach, while, do-while使用し特定の条件の時に処理をスキップしたいことはあると思います。
そのような際には、continue文を使用すると配列の値が特定の処理の場合などに処理をスキップすることが出来ます。
例えば、下記のようなプログラムがある場合、添字$i == 4の時のみ値をechoせずに処理をスキップ出来ます。
・PHPプログラム
<?php for( $i=0;$i<10;$i++ ) { if( $i===4 ){ echo "ループをスキップする\n"; continue; } echo $i ."\n"; } ?>
・実行結果
0 1 2 3 ループをスキップする 5 6 7 8 9
上記の例の場合、添字$i == 4の時のみ添字の値をechoせずに処理をスキップしているのがわかると思います。
continue文で繰り返し処理をスキップする階層をしていする
上記の例では、スキップするループの階層が一つでしたが、複数の階層をcontinue文でスキップすることも出来ます。
continue;とプログラムに記載すると自動的にcotinue 1;と解釈されますが、複数階層のループをスキップしたい場合には、下記のように記載することでスキップしたい階層を指定することが出来ます。
例えば、下記のようなプログラムを実行すると2階層処理をスキップすることが出来ます。
・PHPプログラム
<?php for( $i=0;$i<4;$i++ ){ for( $j=0;$j<4;$j++ ){ if( $i===2 ){ echo "ループをスキップする\n"; continue 2; } echo $i . $j . "\n"; } } ?>
・処理結果
00 01 02 03 10 11 12 13 ループをスキップする 30 31 32 33
上記の例の場合、添字$i == 2の時に2階層分のループの処理をスキップし、$i == 3の処理へ移行しています。
break文の例
break文は、for, foreach, while, do-whileなどのループやswitchの処理を途中で抜け出すときに使います。
break文は下記のように使用します。
break文で処理を抜ける
・PHPプログラム
<?php for( $i=0;$i<10;$i++ ) { if( $i===4 ){ echo "ループを終了する\n"; break; } echo $i ."\n"; } ?>
・処理結果
0 1 2 3 ループを終了する
添字の$i == 4の時にループの処理を中断し抜けていることが上記のサンプルプログラムでわかると思います。
break文で複数階層のループを抜ける
break文では、continue文と同様に複数階層のループを抜けることが出来ます。
break;と記載すると、break 1;と解釈されますが、複数階層のループを抜けたい場合は、下記のように記載します。
・PHPプログラム
<?php for( $i=0;$i<4;$i++ ){ for( $j=0;$j<4;$j++ ){ if( $i===2 ){ echo "ループ終了する\n"; break 2; } echo $i . $j . "\n"; } } ?>
・処理結果
00 01 02 03 10 11 12 13 ループ終了する
上記の例をみると、添字$i == 2の時に二つのfor文の処理を抜けていることが確認できると思います。
continue文もbreak文もPHPでソースを書いたり読んだりする時に必要な知識です。ぜひ、理解しておくようにしましょう。