do..while文を使った繰り返し処理の方法

do..while 文は PHP の繰り返し処理を行う構文の一つで、条件式が TRUE である間、指定した処理を繰り返し実行します。 while 文との違いは、繰り返し処理を少なくとも一回は行ってから条件式を評価する点です。ここでは PHP で do..while 文の使い方について解説します。

do..while文の使い方

do..while 文は繰り返し処理の一つで、条件式が TRUE の間、指定した処理を繰り返します。書式は次のようになっています。

do{
  実行する処理1;
  実行する処理2;
  ・・・
}while (条件式);

まずブロック内の処理を順番に一度実行します。そのあとで条件式に記述した式が TRUE を返すと再びブロック内の処理を実行します。これを条件式が FALSE になるまで繰り返します。 while 文ではまず最初条件式の評価を行うことから場合によっては一度も繰り返し処理を行わないこともありますが、 do..while 文では少なくとも一回は繰り返し処理を実行する点が異なります。

実行される処理が1つだけの場合はブロックを省略して次のように記述しても構いません。

do
  実行する処理;
while (条件式);

ではdo..while文がどのように実行されるのか確認していきます。次のような例で考えてみます。

$num = 0;

do{
  echo "num=".$num;
}while (num < 2);

この時、次のように実行されます。

 1) 変数「num」に 0 を代入
 2) do..while 文を使った繰り返しを開始
 3) ブロック内の処理を実行。変数の値を出力。
 4) 条件式を評価。変数の値は 0 で 2 より小さいので条件式は TRUE
 5) do..while 文の先頭へ戻る
 6) ブロック内の処理を実行。変数の値を出力。
 7) 条件式を評価。変数の値は 0 で 2 より小さいので条件式は TRUE
 8) do..while 文の先頭へ戻る
 9) (6)から(8)を無限に繰り返し実行

do..while 文は条件式が FALSE にならない限り何度でもブロック内の処理を繰り返します。今回の例ではブロック内の処理を最後まで実行しても、条件式野中の変数の値が変化しないので、条件式はずっと TRUE のままで繰り返し処理が終わりません。

それでは先ほどの例を次のように変更しました。

$num = 0;

do{
  echo "num=".$num;
  $num += 1;
}while (num < 2);

この時、次のように実行されます。

 1) 変数「num」に 0 を代入
 2) do..while 文を使った繰り返しを開始
 3) ブロック内の処理を実行。変数の値を出力。
 4) 変数の値に 1 を追加。
 5) 条件式を評価。変数の値は 0 で 2 より小さいので条件式は TRUE
 6) do..while 文の先頭へ戻る
 7) ブロック内の処理を実行。変数の値を出力。
 8) 変数の値に 1 を追加。
 9) 条件式を評価。変数の値は 2 で 2 より小さいので条件式は FALSE
 10) 繰り返し処理が終了

今度はブロック内の処理で、条件式で使われている変数の値を変化させています。このため、ある回数だけ繰り返し処理が行われると条件式が FALSE となり do..while 文が終了されます。

while 文は繰り返し回数が決まっていない場合に便利です。ただし無限ループとならないように十分気をつける必要があります。

なお do..while 文でも break 文や continue 文を使用できます。詳しくは「break文とcontinue文を使った繰り返し処理の制御」を参照されてください。

サンプルコード

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

<?php
$num = 1;

do {
  echo "num = ".$num."\n";
  $num *= 2;
}while ($num < 100);

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

php sample.php

d0..while文の使い方

変数の値が 100 よりも小さい間は繰り返し処理を行います。繰り返し処理が行われる毎に変数の値を 2 倍しました。

do..while文の中でdo..while文を使う

do..while 文で繰り返し実行される処理の中に、別の do..while 文を記述することができます。例えば次のように記述します。

do{
  実行する処理1-1;
  実行する処理1-2;

  do{
    実行する処理2-1;
  }while (条件式2);

}while (条件式1);

外側のブロック内の処理がまず一回実行されます。実行する処理の一つとして内側に記述された do..while 文が実行され、内側のブロック内の処理がまず一回実行されます。そのあとで内側の条件式が評価され、 FALSE になるまで繰り返し処理が実行されます。

内側の繰り返し処理が最後まで実行されると、外側の条件式が評価され、 FALSE になるまで繰り返し処理が行われます。

例えば次のような使い方をします。

$num1 = 1;

do {
  $num2 = 1;

  do {
    echo $num1*$num2."\n";
    $num2 += 1;
  }while ($num2 < 5);

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

この場合では外側の do..while 文の繰り返し処理が 1 回実行されるたびに内側の do..while 文の繰り返し処理が 4 回実行されます。外側の繰り返し処理は 4 回実行されますので、よって内側の繰り返し処理は合計 16 回実行されることになります。

サンプルコード

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

<?php
$num1 = 1;

do {
  $num2 = 1;

  do {
    echo $num1."*".$num2."=".$num1*$num2."\n";
    $num2 += 1;
  }while ($num2 < 5);

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

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

php sample.php

do..while文の使い方

外側の繰り返し処理は変数の値が 5 よりも小さい間繰り返します。そして内側の繰り返し処理も変数の値が 5 よりも小さい間繰り返します。

-- --

PHP で do..while 文の使い方について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

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