PHP入門 – ループ処理(for文、while文)

PHP-ループ処理

PHPの初心者向けにfor文やwhile文を用いたループ処理について解説します。

ループ処理とは

ループ処理は、指定した処理を繰り返し行わせる処理のことで、制御構文の1つです。ループ処理の方法は、for文foreach文while文do..while文の種類があります。

for文

for文は、①初期値②ループ条件③増減値を設定する必要があります。①初期値ではループ開始時の値を変数に代入しておきます。②ループ条件では、条件式を書き、ここで書いた条件を満たす限りループが続くことになります。③増減値は、ループ時の変数に対する増減値を設定しておきます。

for (①初期値; ②ループ条件; ③増減値) {
  //繰り返す処理
}

for文の簡単な例として、1~10までの値を表示させる例を以下に示します。
①初期値を「1」、②条件式を「10以下」、③増減値を「+1」に設定していますので、初期値1から1ずつ増加し、10まではループされて、11に到達した時点でループを脱出することになります。
※変数名は任意で指定できますが、慣習的にカウンタ変数として「i」を用いることが多いです。

for ($i = 1; $i <= 10; $i++) {
  echo $i;
}
//結果:12345678910

foreach文

foreach文は、配列や連想配列に対して繰り返し処理を行う構文です。
形式は、「foreach(配列名 as 値変数){処理}」とします。asの後に指定した変数に、配列の先頭から順番に値が代入されていきます。
※値変数は自由に指定できます。

$names = ['佐藤', '山田', '田中'];

foreach ($names as $name) {
 echo $name ;
}
//結果:佐藤 山田 田中

キー変数

foreach文では、キー変数を指定することで、配列であれば「インデックス番号」、連想配列であれば「キー」を代入させることができます。
形式は「foreach(配列名 as キー変数 => 値変数){処理}」とします。
※キー変数と値変数は自由に指定できます。

以下に連想配列からキーと値を順番に表示させる例を示します。

$user = [
  'name' => '佐藤',
  'age' => '25歳',
  'gender' => '男性',
];

foreach ($user as $key => $value) {
  echo $key.':'.$value;
}
//結果:name:佐藤 age:25歳 gender:男性

while文

while文も繰り返し処理を行なうことができますが、①初期値②ループ条件③増減値を指定する場所がfor文とは異なります。
while文の形式は「while(条件式){処理}」として、それぞれの設定は以下のようにします。
①初期値:while文ので、事前に指定
②ループ条件:while文の条件式で指定
③増減値:while文の繰り返し処理として指定

①初期値; 
while (②ループ条件) {
  繰り返す処理;
  ③増減値;
}

1~10までの値を表示させる例を以下に示します。

$i = 1; 
while ($i <= 10) {
  echo $i;
  $i++;
}
//結果:12345678910

do..while文

do..while文は、while文とほぼ同じなのですが、ループ条件を満たしていない場合でも最低1回は処理が実行される特徴があります。というのも、処理を最初、ループ条件を最後に書いているためです。
do..while文の形式は「do{処理}while(ループ条件)」とします。

以下の例では、変数の値がループ条件を満たしていませんが、1回だけ処理が行われています。

$i = 11;
do {
  echo $i;
  $i++;
} while ($i <= 10);
//結果:11

break

break文はループを強制的に中断させる命令で、for, while, foreachの中で使用できます。break文はif文などの条件文と組み合わせて使用します。

以下の例では、$iが7になった時点でループが中断されています。

for($i = 1; $i <= 10; $i++) {
  if ($i >= 7){
    break;
  }
  echo $i;
}
//結果:123456

continue

continue文は現在のループだけをスキップさせる命令で、for, while, foreachの中で使用できます。continue文のif文などの条件文と組み合わせて使用します。

以下の例では、$iが3の倍数の時だけスキップしています。

for ($i = 1; $i <= 10; $i++) {
  if ($i % 3 == 0) {
    continue;
  }
  echo $i;
}
//結果:12457810

無限ループ

for文やwhile文では、必ずいずれループを抜けるような設定をしなければなりません。無限ループが発生するとサーバーに負荷がかかり危険なので注意しましょう。

例えば、以下のwhile文では$iに対する増減処理を書き忘れているため、$i = 1から値が変わることなく、条件式がtrueのままなので、永遠に1を表示し続けることになります。

$i = 1; 
while ($i <= 10) {
  echo $i;
}
//結果:1111111....と永遠に1を表示し続ける