PHPのcontinueの使い方!(ループをスキップする)

PHP

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

・continueをforeachで使えるか
・深い階層で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を使うと、ループの先頭に戻って、後続の処理をスキップする。
・continueはforeachでも使うことができる。
・深い階層のループ処理で使ったときには、呼び出したループの処理ブロックにだけ適用される。
・continueはループの先頭に戻って処理を継続するが、breakはループ処理を抜ける。

コメント

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