プログラムを作成していると同じ処理を何度も繰り返したい時があります。この同じ処理を何度も繰り返すことを「ループ(loop)」と呼びます。PHPでループ処理を行う構文はいくつかありますが、最も簡単なループ構文の一つがwhile文です。

while文の書き方

while文は以下のような形式で書きます。

while (条件) {
  何かを実行する文 1行目;
  何かを実行する文 2行目;
        ;
}

while文は()内に書かれた条件がが成立している間、波括弧{}内に書かれた文が繰り返し実行されます。

実際にwhile文を書いてみよう

以下のコードを打ち込んで実行してみてください。

<?php
	$age = 7;
	while ($age <= 18) {
		echo "$age years old. I go to scool.\n";
		$age = $age + 1;
	}
?>

「最初の年齢が7歳で年齢が18歳以下の間、学校へ行く」というプログラムです。
実行結果は以下のようになります。

7 years old. I go to scool.
8 years old. I go to scool.
9 years old. I go to scool.
10 years old. I go to scool.
11 years old. I go to scool.
12 years old. I go to scool.
13 years old. I go to scool.
14 years old. I go to scool.
15 years old. I go to scool.
16 years old. I go to scool.
17 years old. I go to scool.
18 years old. I go to scool.

while文の条件判断が行われるタイミング

次に、条件判断がいつおこなわれるのかを見るために、最初の年齢を19歳にして実行してみます。

<?php
	$age = 19; // 最初の年齢を 19 歳にする.
	while ($age <= 18) {
		echo "$age years old. I go to scool.\n";
		$age = $age + 1;
	}
?>

結果は何も出力されません。というのも変数ageの値が19でプログラムがスタートし、while文の条件では変数ageが18以下かどうかを判定しているためです。つまり、最初から条件が成り立っていないため、波括弧{}で囲まれた文は実行されません。while文ではまず条件の判定が行われ、その結果が真である場合に{}内の文が実行されるということに注意してください。

無限ループ

以下の例では、while文が無限ループになってしまいます。失敗しやすい部分ですので注意してプログラムを行ってください。
無限ループ例①: 条件式が間違っている。

<?php
	$age = 7;
	while ($age >= 7) {
		echo "$age years old. I go to scool.\n";
		$age = $age + 1;
	}
?>

無限ループ例②: 条件に使われている変数がループ内で変化しない。

<?php
	$age = 7;
	while ($age <= 18) {
		echo "$age years old. I go to scool.\n";
	}
?>

breakを使う

while文のループの途中でエラーが発生した場合など、強制的にループを抜けたい時にはbreak文を使います。特にファイルの読み書きやネットワークへのアクセスなど、実行時にエラーが発生しやすいコードがループ内に含まれている場合は、エラーが発生した時点でループを抜け出すようにしておかないと、何度も同じエラーを発生させることになります。

while (条件) {
    :
   $ret = do_something(); // なにかをする関数。エラーが出たら false を返却する。
   if ($ret==false) {
       break;             // エラーが出たら while ループを強制的に抜け出す。
   }
}