PHP入門 – ループ処理(for文、while文)
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を表示し続ける