繰り返し処理するwhile構文

メンバーシップ(月額 980円)になって、このページの動画を見よう

例えば、次のように画面に1から数字を順番に出力したい時などに、すべて手で記述するのは大変です。

これをプログラムで出力するためには、まず変数を準備して最初の数字を代入し、画面に表示しましょう。

<?php
$i = 1;
echo $i . '<br>';
?>

そして、次の数字を出力するには今の変数に1を加えて、これをまた画面に表示するということの繰り返しです。

<?php
$i = 1;
echo $i . '<br>';

$i = $i + 1;
echo $i . '<br>';
?>

では、これを「繰り返し構文」を使って、連続して出力できるようにしましょう。次のように変更します。

<?php
$i = 1;
echo $i . '<br>';

while ($i < 366):
  $i = $i + 1;
  echo $i . '<br>';
endwhile;

これで画面を表示すると、1から366までの数字が連続して表示されます。

ここで利用しているのがwhile構文です。次のように記述します。

while (繰り返す条件):
  繰り返す処理
endwhile;

「繰り返す条件」には、不等号などを使うことができ、例えばここでは「$i」という変数の内容が「366」という数字よりも小さい(<)間、繰り返すという条件になります。

「$i」は最初は1なのでこの場合、while構文の中にある「繰り返す処理」が行われます。ここでは、次のプログラムが実行されます。

$i = $i + 1;
echo $i . '<br>';

変数の内容に1を加えて画面に表示します。これによって、2が表示されます。そしたら、再びwhile構文の条件に戻ります。

こうして、1を加えながら「$i」が365になるまで繰り返されます。365になると、最後に1を加えて366を画面に表示した後、条件から外れてしまいます。これによって、while構文が終わるというしくみです。

無限ループ・永久ループに注意

while構文を利用する時は、条件は必ずいつか終わるものにしなければなりません。例えば、次のように条件を「$iが0より大きい間」としてしまうと、ループが終わらなくなってしまいます。

これは、「$i」は1ずつ加えられていくため、0よりも小さくなることはあり得ません。すると、ループは終わることなく1が加えられていってしまうため、終わらなくなってしまうと言うわけです。

while構文を利用する場合は、条件の作り方に気をつけましょう。

プログラムを改良しよう

先のプログラムは、動作としては正しいのですがechoが2箇所に分かれてしまっていて、あまりきれいなプログラムとは言えません。できるだけ、処理はwhile構文の中にまとめてしまう方がよいでしょう。次のように変更しましょう。

<?php
$i = 1;
while ($i < 366):
  echo $i . '日<br>';
  $i = $i + 1;
endwhile;
?>

1を加える前にechoで画面出力をしています。これによって、1から順番に画面に表示されるという具合です。こちらのプログラムの方がよいでしょう。

ともすたチャンネルに
チャンネル登録する