phpの制御構文(2)for文、while文、foreach文
制御構文の繰り返しについて説明します。制御の方法によって複数の文を使い分けることで用途に合った効率的なプログラムの記述ができます。今回は、for文、while文、foreach文について説明します。
for文
for文は、カウンタと呼ばれるループ処理を制御する変数を使って繰り返し処理を実行します。
for(カウンタの初期値; ループ処理の条件式; 増減式){
処理を実行する
}
カウンタの初期値 | カウンタの始まりの値 |
---|---|
ループの条件式 | ループを続ける条件式 |
増減式 | ループでの増減値(通常カウンタの増減値) |
実際の動きを確認しましょう。
1 2 3 4 |
$a = 10; for($i=0; $i<$a; $i++){ echo "iの値は".$i."です"; } |
1 2 3 4 5 6 7 8 9 10 |
0 1 2 3 4 5 6 7 8 9 |
①初期値は0です。
②$iの値が$aの値より小さい間{}内の処理を繰り返し実行する
③処理が終わったら$iの値を1増やす(++は、インクリメント演算子といって1増加します)
次は、配列に対して処理しましょう
1 2 3 4 5 6 7 |
$a = array("apple","banana","orange","melon","peach","grape"); $cnt = count($a); for($i=0; $i<$cnt; $i++){ echo $a[$i]; echo "<br>"; } |
1 2 3 4 5 6 |
apple banana orange melon peach grape |
※「count()」は、配列の要素数を取得します
while文
while文では、条件式を評価し結果が正しい場合(true)にはwhile内の処理を実行します。
while(条件式){
処理
}
実際の動きを確認しましょう。
1 2 3 4 5 6 |
$a = 0; while($a < 5){ echo $a; echo "<br>"; $count++; } |
1 2 3 4 5 |
0 1 2 3 4 |
foreach文
foreach文は、配列を専門に扱う制御構文でfor文やWhile文のように繰り返し処理をします。処理としては全ての配列に対して実行する処理をイメージしてください。
1 2 3 4 5 |
$fruits = array("apple","banana","orange","melon","peach","grape"); foreach($fruits as $fruit){ echo $fruit; echo "<br>"; } |
1 2 3 4 5 6 |
apple banana orange melon peach grape |
配列の$fruitsから1つずつ$fruitを渡して処理をします。
{}内の処理では、配列から順番に渡された変数に対して処理を実行します。
foreach文は、「key」と「value」を使用した連想配列に対しても便利に処理ができます。
例えば果物の名前をkeyにして値段をvalueに設定した場合の処理を確認しましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$fruits = array( "apple" => 100, "banana" => 30, "orange" => 50, "melon" => 500, "peach" => 200, "grape" => 400 ); foreach($fruit as $key => $value){ echo $key."の値段は".$value."円です"; echo "<br>"; } |
1 2 3 4 5 |
appleの値段は100円です bananの値段は30円です orangeの値段は50円です meloneの値段は200円です grapeの値段は400円です |
continue文
繰り返しループの中でスキップ処理をします。
1 2 3 4 5 6 7 8 |
$a = array("apple","banana","orange","melon","peach","grape"); $cnt = count($a); for($i=0; $i<$cnt; $i++){ if($a[$i]=="orange"){ continue; } echo $a[$i]; echo "<br>"; } |
上記のソースでは、値が「orange」なら出力処理をスキップします。
1 2 3 4 5 |
apple banana melon peach grape |
break文
繰り返し処理の途中で処理を打ち切り処理のループから抜け出ることが出来ます。
1 2 3 4 5 6 7 |
$a = 0; while(1){ if($a > 5){ break; } echo $a; echo "<br>"; $count++; } |
while(1) は、式が真の間となるので無限にループします。
但し$aの値が5より大きくなったらbreak文を実行してwhileループから抜けます。
1 2 3 4 5 6 |
0 1 2 3 4 5 |