break文とcontinue文を使った繰り返し処理の制御

break 文と continue 文は、どちらも繰り返し処理の制御に使用される構文です( break 文は switch 文でも使用できます)。 break 文が実行されると繰り返し処理を終了し、 continue 文が実行されると現在の繰り返し処理の残りをスキップして次の繰り返しへ進みます。ここでは PHP での break 文と continue 文の使い方について解説します。

break文の使い方

break 文が繰り返し処理の中で実行されると、繰り返し処理が終了となります。

break;

例えば次のように使います。

$count = 1;
$sum = 0;

while ($count <= 100){
  $sum += $count;

  if ($sum > 300){
    break;
  }

  $count += 1;
}

この例では、 1, 2, 3, ... と数値を 1 ずつ増加していき、順番に加算していきます。 while 文の条件式では 100 になるまで加算するようになっていますが、それとは別に合計の値が 1000 を超えたら break 文を実行して繰り返し処理終了させています。

また break 文を使った書き方としてよく使われるのが while 文の条件式に TRUE を指定して無限ループにしておき、繰り返し処理を終えるのは break 文で行う方法です。次の例を見てください。

$count = 1;
$sum = 0;

while (TRUE){
  $sum += $count;

  if ($count <= 100){
    break;
  }

  $count += 1;
}

while 文の条件式に TRUE が記載されており、条件式が FALSE になることはないため無限ループとなります。ただ繰り返し処理の中で、条件を満たせば break 文が実行されて繰り返し処理を終了となります。

サンプルコード

では簡単なプログラムで試してみます。

<?php
$count = 1;
$sum = 0;

while ($count <= 100){
  $sum += $count;
  echo $sum."\n";

  if ($sum > 200){
    break;
  }

  $count += 2;
}

作成したプログラムを sample.php として保存しました。その後でコマンドプロンプトを起動し、次のように実行しました。

php sample.php

break文の使い方

1, 3, 5, 7, ... と順に 2 ずつ増加する数を加算していきます。加算する数値が 100 を超えたら繰り返し処理を終了しますが、それとは別に加算された数値が 300 を超えた場合も繰り返し処理を終了しています。

どの繰り返し処理を終了するか指定する

while 文の中に別の while 文を記述することで、繰り返し処理を入れ子(ネスト)にすることができます。このとき、内側の while 文の処理中に break 文が実行されると、その break 文が含まれている最も内側の while 文だけが終了します。

次の例を見てください。

$i = 1;

while ($i < 10){
  $j = 1;
  while ($j < 10){
    if ($i * $j > 15){
      break;
    }

    $j += 1;
  }

  // breakが実行された時に処理が移る位置
  $i += 1;
}

内側の while 文の中で、指定された条件を満たすと break が実行されますが、デフォルトでは break 文が含まれている最も内側の繰り返し処理だけが終了となります。その為、内側の繰り返し処理は終了しますが、外側の繰り返し処理は引き続き繰り返しを継続します。

break 文を実行するときに 数値を指定することで、終了する繰り返し処理を指定できます。

break 階層数;

次の例を見てください。

$i = 1;

while ($i < 10){
  $j = 1;
  while ($j < 10){
    if ($i * $j > 15){
      break 2;
    }

    $j += 1;
  }

  $i += 1;
}

// breakが実行された時に処理が移る位置

内側の while 文の中で、指定された条件を満たすと break が実行されますが、今回は break 文に 2 を指定しているので、 break 文が含まれる最も内側の、もう一つ外側にある繰り返し処理が終了となります。その為、内側だけでなく外側の繰り返し処理も終了します。

サンプルコード

では簡単なプログラムで試してみます。

<?php
$i = 1;

while ($i < 5){
  $j = 1;
  while ($j < 5){
    echo $i."*".$j."=".$i*$j."\n";
    if ($i * $j > 10){
      break 2;
    }

    $j += 1;
  }

  $i += 1;
}

echo "終了しました";

作成したプログラムを sample.php として保存しました。その後でコマンドプロンプトを起動し、次のように実行しました。

php sample.php

break文の使い方

二つの変数を使って二重の繰り返し処理をしています。二つの変数の乗算の結果が 10 を超えたら、一番内側の繰り返し処理の中から break 文を実行してすべての繰り返し処理を終了しています。

continue文の使い方

continue 文が繰り返し処理の中で実行されると、繰り返し処理のブロック内にあるそれ以降の処理を実行せず、次の繰り返し処理のための条件式の評価を行います。

continue;

例えば次のように使います。

$count = 0;
$sum = 0;

while ($count < 100){    // continueが実行された時に処理が移る位置
  $count += 1;

  if ($count % 5 == 0){
    continue;
  }

  $sum += $count;
}

この例では、 1, 2, 3, ... と数値を 1 ずつ増加していき、順番に加算していきます。ただ、数値が 5 の倍数の場合は continue 文を実行してそれ以降に記述されている数値の加算を行わずに条件式の評価を行います。

サンプルコード

では簡単なプログラムで試してみます。

<?php
$count = 0;
$sum = 0;

while ($count < 10){
  $count += 1;

  if ($count % 3 == 0){
    continue;
  }

  $sum += $count;
}
echo $sum;

作成したプログラムを sample.php として保存しました。その後でコマンドプロンプトを起動し、次のように実行しました。

php sample.php

continue文の使い方

1 から 10 までの数値を順に加算していきますが、加算する数値が 3 の場合の場合は加算しません。

どの繰り返し処理の条件式の評価まで戻るのか指定する

while 文の中に別の while 文を記述することで、繰り返し処理を入れ子(ネスト)にすることができます。このとき、内側の while 文の処理中に continue 文が実行されると、その continue 文が含まれている最も内側の while 文の条件式の評価へ処理が移ります。

次の例を見てください。

$num1 = 0;

while ($num1 < 5){
  $num1 += 1;

  $num2 = 0;
  while ($num2 < 5){    // continueが実行された時に処理が移る位置
    $num2 += 1;
    if ($num1 + $num2 > 5){
      continue;
    }

    echo $num1."+".$num2."=".$num1+$num2."\n";
  }
}

内側の while 文の中で、指定された条件を満たすと continue が実行されますが、デフォルトでは continue 文が記述された最も内側にある繰り返し処理の条件式の評価へ処理が移ります。

continue 文を実行するときに 数値を指定することで、どの繰り返し処理にある条件式の評価に処理を移すのかを指定できます。

continue 階層数;

次の例を見てください。

$num1 = 0;

while ($num1 < 5){    // continueが実行された時に処理が移る位置
  $num1 += 1;

  $num2 = 0;
  while ($num2 < 5){
    $num2 += 1;
    if ($num1 + $num2 > 5){
      continue 2;
    }

    echo $num1."+".$num2."=".$num1+$num2."\n";
  }
}

内側の while 文の中で、指定された条件を満たすと continue が実行されますが、今回は continue 文に 2 を指定しているので、 continue 文が含まれる最も内側の、もう一つ外側にある繰り返し処理にある条件式の評価へ処理が移ります。

サンプルコード

では簡単なプログラムで試してみます。

<?php
$num1 = 0;

while ($num1 < 5){
  $num1 += 1;

  $num2 = 0;
  while ($num2 < 5){
    $num2 += 1;
    if ($num1 + $num2 > 5){
      continue 2;
    }

    echo $num1."+".$num2."=".$num1+$num2."\n";
  }
}

作成したプログラムを sample.php として保存しました。その後でコマンドプロンプトを起動し、次のように実行しました。

php sample.php

continue文の使い方

二つの変数を使って二重の繰り返し処理をしています。二つの変数の加算の結果が 5 を超えたら、一番内側の繰り返し処理の中から continue 文を実行して外側の繰り返し処理の条件評価へ処理を移しています。

-- --

PHP での break 文と continue 文の使い方について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。