【PHP】continue文 – 繰り返し処理をスキップする – 全種類(for/foreach/while/do-while)

繰り返し処理で次の繰り返しにスキップするcontinue文とよ呼ばれる仕組みがあります。
continue文はfor文やforeach文、while文、do-while文で使うことができます。

ここではcontinue文について解説します。

なお、for / foreach / while / do-whileについては次の記事をご覧ください。

★ 内容

  • continue文

continue文とは

continue文は繰り返し処理で次の繰り返しにスキップするための仕組みです。
for文やforeach文、while文、do-while文のブロック(波括弧{})の中で使うことができます。

基本構文

continue文の基本構文は次のようになります。

continue;

プログラム実行時にcontinueが実行されると、以降のブロックの処理を中断し、次の繰り返し処理を行います。

サンプルコード

サンプルコードでcontinue文の動作を確認していきましょう。

for文

ソースコード

<?php

for( $i = 0; $i < 3; $i++ ) {
    echo $i."回目の繰り返し処理(前半)\n";
    if( $i == 1 ) {
        continue;
    }
    echo $i."回目の繰り返し処理(後半)\n";
}

?>

実行結果

0回目の繰り返し処理(前半)
0回目の繰り返し処理(後半)
1回目の繰り返し処理(前半)
2回目の繰り返し処理(前半)
2回目の繰り返し処理(後半)

for文は$iが0~2の間、繰り返し処理します。
1回の繰り返し処理で2回の出力(前半と後半)がありますが、$i1の時はcontinueが実行されるため、後半の出力はスキップされ実行されません。

実行結果からも後半の出力がないことが分かります。

foreach文

ソースコード

<?php

$fruits = [
    'Apple',
    'Orange',
    'Grape',
    'Melon',
];

foreach( $fruits as $data ) {
    if( $data == 'Grape' ) {
        continue;
    }
    echo "この果物は".$data."です。\n";
}

?>

実行結果

この果物はAppleです。
この果物はOrangeです。
この果物はMelonです。

for文と同様に、continueが実行される繰り返し処理では、以降の処理が実行されず、次の繰り返し処理を実行していることが実行結果から分かります。

while文

ソースコード

<?php

$num = 1;
while( $num < 30 ) {
    $num = $num * 2;
    if( $num == 16 ) {
        continue;
    }
    echo '$num = '.$num."\n";
}

?>

実行結果

$num = 2
$num = 4
$num = 8
$num = 32

2の累乗が30以上になるまで算出と出力を行うプログラムです。
2の累乗の値は$numに記憶されるようになっていますが、16のときcontinueが実行されるため、以降の出力は実行されません。

do-while文

ソースコード

<?php

$num = 1;
do {
    $num = $num * 2;
    if( $num == 16 ) {
        continue;
    }
    echo '$num = '.$num."\n";
} while( $num < 30 );

?>

実行結果

$num = 2
$num = 4
$num = 8
$num = 32

こちらは上記、while文でのサンプルコードをdo-while文に書き換えたものになります。
while文と同様に$numが16のときだけ出力が実行されていないことが実行結果から分かります。

演習問題

問題1

解答例

九九を出力するプログラムを作成してください。
なお、下記条件を満たすものとします。

  • for文を使う。
  • 4の数値を使う計算はスキップする

実行結果

-- 1の段 --
1 × 1 = 1
1 × 2 = 2
1 × 3 = 3
1 × 5 = 5
1 × 6 = 6
1 × 7 = 7
1 × 8 = 8
1 × 9 = 9

-- 2の段 --
2 × 1 = 2
2 × 2 = 4
2 × 3 = 6
2 × 5 = 10
2 × 6 = 12
2 × 7 = 14
2 × 8 = 16
2 × 9 = 18

-- 3の段 --
3 × 1 = 3
3 × 2 = 6
3 × 3 = 9
3 × 5 = 15
3 × 6 = 18
3 × 7 = 21
3 × 8 = 24
3 × 9 = 27

-- 5の段 --
5 × 1 = 5
5 × 2 = 10
5 × 3 = 15
5 × 5 = 25
5 × 6 = 30
5 × 7 = 35
5 × 8 = 40
5 × 9 = 45

-- 6の段 --
6 × 1 = 6
6 × 2 = 12
6 × 3 = 18
6 × 5 = 30
6 × 6 = 36
6 × 7 = 42
6 × 8 = 48
6 × 9 = 54

-- 7の段 --
7 × 1 = 7
7 × 2 = 14
7 × 3 = 21
7 × 5 = 35
7 × 6 = 42
7 × 7 = 49
7 × 8 = 56
7 × 9 = 63

-- 8の段 --
8 × 1 = 8
8 × 2 = 16
8 × 3 = 24
8 × 5 = 40
8 × 6 = 48
8 × 7 = 56
8 × 8 = 64
8 × 9 = 72

-- 9の段 --
9 × 1 = 9
9 × 2 = 18
9 × 3 = 27
9 × 5 = 45
9 × 6 = 54
9 × 7 = 63
9 × 8 = 72
9 × 9 = 81

問題2

解答例

次の実行例になるような複数商品の合計料金を出力するプログラムを作成してください。
なお、下記条件を満たすものとします。

  • 商品の料金は『単価×個数』とする
  • 商品名、単価、個数は標準入力で入力する
  • 商品名が空入力の場合、その商品入力をスキップする
    ※ 空入力 = 何も入力せずにEnterキーを押す
  • 単価、個数の入力値は整数型(interger)にキャストする
  • 商品入力の最後に継続可否を入力し、Yの場合は次の商品入力処理、Nの場合は終了する

実行例1

コマンドライン

<<<< 商品入力 >>>>
商品名 > 炭酸水
単価  > 150
個数  > 2
続けますか?(Y/N)> Y
商品名 > 
商品名 > 
商品名 > 弁当
単価  > 560
個数  > 2
続けますか?(Y/N)> Y
商品名 > お菓子
単価  > 300
個数  > 7
続けますか?(Y/N)> N

<<<<  会計  >>>>
---- 合計料金 ----
3520
----  明細  ----
商品名 : 炭酸水
単価  : 150
個数  : 2
.................
商品名 : 弁当
単価  : 560
個数  : 2
.................
商品名 : お菓子
単価  : 300
個数  : 7
.................

実行例2

コマンドライン

<<<< 商品入力 >>>>
商品名 > ローストビーフ
単価  > 1500
個数  > 2
続けますか?(Y/N)> y
続けますか?(Y/N)> x
続けますか?(Y/N)> a
続けますか?(Y/N)> Y
商品名 > ワイン
単価  > 500
個数  > 4
続けますか?(Y/N)> Y
商品名 > 牡蠣
単価  > 600
個数  > 8
続けますか?(Y/N)> n
続けますか?(Y/N)> x
続けますか?(Y/N)> N

<<<<  会計  >>>>
---- 合計料金 ----
9800
----  明細  ----
商品名 : ローストビーフ
単価  : 1500
個数  : 2
.................
商品名 : ワイン
単価  : 500
個数  : 4
.................
商品名 : 牡蠣
単価  : 600
個数  : 8
.................

まとめ

continue文は繰り返し処理(for/foreach/while/do-while)で次の繰り返し処理にスキップする仕組みです。
プログラミングでは多々使うことがありますので、覚えていきましょう。