PHPのcontinueの使い方について書いています。
最初にcontinueについて解説して、その後に下記の内容について書きました。
・深い階層でcontinueを使うとどうなるか
・continueとbreakの違いは?
載せているコードはPHPのバージョン8.1.12で動作確認しました。
continueの使い方
ループ処理の中でcontinueを使うことができます。
continueを使うと、ループの先頭に戻って、後続の処理をスキップします。
例えば、下記のように使うことができます。
<?php
for ($i = 0; $i < 6; $i++) {
if ($i === 3) {
continue;
}
echo $i . "\n";
}
for文で変数$i
が0から5までの間、6回繰り返します。
ループ処理の最初にif文で判定を入れています。
変数$i
が「3」だったときに、continueを実行します。
ループ処理の最後にechoを使って、変数$i
の値を出力しました。
プログラムで出力した内容を確認すると、下記にようになります。
0
1
2
4
5
変数$i
が「3」がだったときには、出力されずにループの先頭に戻ります。
そのあと、変数$i
がカウントアップされながら、処理が続いたことが確認できました。
continueをforeachで使う
foreach文でループ処理を行なっている途中でも、continueを使うことができます。
例えば、下記のように使います。
$fruits = ['apple', 'banana', 'orange', 'grape', 'peach'];
foreach ($fruits as $fruit) {
if ($fruit === 'banana' || $fruit === 'grape') {
continue;
}
echo $fruit . "\n";
}
最初に$fruits
変数に、5つの果物名で配列を作りました。
その次の処理で、foreach文を使って、$fruits
配列をループ処理しています。
$fruit
変数に、配列の要素がひとつずつ代入されます。
$fruit
変数の値が「banana
」または「grape
」だったときには、continueするようにしました。
ループ処理の最後に$fruit
変数を出力しています。
プログラムを実行して、出力内容を確認すると、下記のようになりました。
apple
orange
peach
$fruit
変数の値が「banana
」または「grape
」のときには、ループの先頭に戻ります。
そのため、出力がスキップされたことが確認できました。
深い階層でcontinueを使うと?
for文の2重ループなど、深い階層でcontinueを使ったときです。
このときには、continueを使ったループの先頭に戻ります。
例えば、下記のように2重ループで使います。
for ($i = 0; $i < 3; $i++) {
for ($j = 0; $j < 3; $j++) {
if ($j === 1) {
continue;
}
echo "i:{$i} j:{$j}\n";
}
}
変数$i
の箇所のループが0から2までの3回繰り返します。
変数$j
の箇所のループも0から2までの3回繰り返します。
変数$j
が「1」だったときにcontinueを呼んで、ループの先頭に戻ります。
こうするとcontinueしたときに、変数$j
の箇所のループの先頭に戻り、変数$j
に次の「2」が設定されて処理が続きます。
そのため、変数$j
の箇所のループは2回しか出力されません。
プログラムを実行すると、下記のようになります。
i:0 j:0
i:0 j:2
i:1 j:0
i:1 j:2
i:2 j:0
i:2 j:2
変数$i
の箇所のループは3回繰り返されました。
変数$j
の箇所のループはcontinueしているので、途中で先頭に戻って、値が「1」のときには出力されませんでした。
階層が3つなど、深くなっても同じように、continueはループの途中で呼び出したブロックのみに適用されます。
continueとbreakの違い
continueはループの途中で呼び出すと、ループの先頭に戻って、後続の処理をスキップしました。
breakはループの途中で呼び出すと、ループの処理を抜けて、繰り返し処理が終わります。
breakの下記の記事に、同じソースコードを元に違いを解説しているので、確認してみてください。
・PHPのbreakの使い方!サンプル4つ!(ループを抜ける)
終わりに
今回はPHPのcontinueの使い方について書きました。
記事の内容をまとめると、下記のようになります。
・continueを使うと、ループの先頭に戻って、後続の処理をスキップする。
・continueはforeachでも使うことができる。
・深い階層のループ処理で使ったときには、呼び出したループの処理ブロックにだけ適用される。
・continueはループの先頭に戻って処理を継続するが、breakはループ処理を抜ける。
コメント