PHPでは次の4つの命令で処理を繰り返す事ができます。
オプションとしてbreakとcontinueが使えます
よく使われるのは、数値が「0→1→2→3」や「1→3→5」と規則正しくカウントアップ(ダウン)する繰り返しです。開始値と変化量と条件を指定し条件が真の間だけ繰り返します。
for(処理a; 条件b; 処理c){ // 処理d } //処理e
繰り返しの最初だけ「処理a(変数の初期化)」を行い、以後は条件bが真の間だけ「条件b→処理d→処理c(変数変化)」を繰り返します。条件bが偽になると繰り返しを終了して「処理e」に進みます。
$iが0から1づつカウントアップし0→1→2→3→4・・と繰り返し、5になった時点で繰り返しを終了して次の処理を開始する例です。条件bの不等号が「<」となっている事に注目、i<5
は5未満なので5はループ内で処理しません
echo '<p>開始'; for( $i=0 ; $i<5 ; $i++ ){ echo $i; } echo '終了'.$i.'</p>';
開始01234終了5
1から10まで加算する例です。先ほどと違い条件aは1から始まり条件bがの不等号が「i<=10」とイコール付きなのでループ内で10まで処理します。
$count=0; for( $i=1 ; $i<=10 ; $i++ ){ $count+=$i; } echo '<p>合計は '.$count.' です</p>';
合計は 55 です
主に繰り返し処理を行う前には繰り返し回数がわからない場合に使用されます。繰り返し回数がわかる場合にはforと同じようにも使えます。
while( 条件a ){ // 処理b } // 処理c
条件aが真の間は「条件a→処理b」を繰り返し、条件aが偽になると処理cに進みます。注意点は処理bで条件aを正しくない状態にできない場合は無限に繰り返すので注意してください。
主に終了条件が確定して無い場合に使用します。
0~9までの乱数を使い何回目で9未満の場合繰り返し、9が出たら終了します。
echo '<p>'; $i=0; $count=0; while( $i < 9 ){ $i=mt_rand(0,9); $count++; echo $i; } echo '・・・'.$count.'回目に終了しました</p>';
76809・・・5回目に終了しました
forと同じような使い方もできます。違いは変数の初期化・変化式を1行に書けないので行数が多くなりソースコードの見通しが悪くなります。しかし変化式の書く位置を前後できるのでforより自由度があります。
//forと同じパターンの処理 echo '<p>開始a='; $i=0; while( $i < 5 ){ echo $i; $i++; } echo '終了'.$i.'</p>'; //変数の変化式の位置を変更 echo '<p>開始b='; $i=0; while( $i < 5 ){ $i++; //処理の前に$iを変化 echo $i; } echo '終了'.$i.'</p>';
開始a=01234終了5
開始b=12345終了5
whileに似ていますが、繰り返し処理の後に条件チェックが行われるので必ず1回は繰り返し処理を行います。
do{ 処理a }while( 条件b ); 処理c
処理aを行い、条件bが真の間は「処理a→条件b」を繰り返します。条件bが偽になると処理cを行います
0~9までの乱数を使い何回目で9未満の場合繰り返し、9が出たら終了します。
echo '<p>'; $count=0; do{ $i=mt_rand(0,9); $count++; echo $i; }while( $i < 9 ); echo '・・・'.$count.'回目に終了しました</p>';
46861479・・・8回目に終了しました
主に配列や連想配列の処理に使用されます。配列・連想配列を1つずつ取り出します。
foreach(配列a as 値を格納する変数b){ 処理c }
配列aの数だけ「配列aから値を1つ取り出し変数bに格納→処理cを実行」します。
echo '<p>'; $array = array("aa","bb","cc"); foreach($array as $value){ echo $value; } echo '</p>';
= 結果 =
aa
bb
cc
foreach(連想配列a as キーを格納する変数b => 値を格納する変数c){ 処理d }
連想配列aの数だけ「連想配列aから1つキーと値を取り出し変数bと変数cに格納→処理dを実行」します
echo '<p>'; $array = array("key1"=>"aa","key2"=>"bb","key3"=>"cc"); foreach($array as $key => $value){ echo $key."=".$value."<br>"; } echo '</p>';
= 結果 =
key1=aa
key2=bb
key3=cc