MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
PHPの基礎 - 繰り返しのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
PHPの基礎 - 繰り返し
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == 繰り返し処理は、決まった回数や条件を満たしている間は同じ処理を繰り返し行う場合に使用する。<br> ここでは、<code>for</code>文、<code>while</code>文、<code>foreach</code>文の使用方法について記載する。<br> <br><br> == for文 == ==== for文の基礎 ==== 繰り返し処理では、条件式を評価して繰り返しを継続するかどうか判別する。<br> 条件式には色々な条件を記述することができるが、決められた回数だけ繰り返すといった処理に使用される。<br> <br> 変数の値を変化させて条件式で評価する場合、<code>for</code>文を使用すると簡潔に記述することができる。<br> <code>for</code>文に書式は、以下の通りである。<br> <syntaxhighlight lang="php"> for(初期化式; 条件式; 変化式) { 実行する処理1; 実行する処理2; } </syntaxhighlight> <br> <code>for</code>文では初期化式、条件式、変化式の3つを記述する。<br> * 初期化式 *: <code>for</code>文の処理が開始される時に1度だけ実行されて、通常は条件式の中で使用される変数等の初期化を行う式を記述する。 * 条件式 *: <code>while</code>文と同様、繰り返しを継続するかどうかの判定に使用する。 *: 条件式の評価が真ならばブロック内の処理を実行する。偽ならば<code>for</code>文を終了する。 * 変化式 *: 一般的に、条件式の中で使用される変数等を、繰り返しが1回行われるごとに変化させるための式を記述する。 <br> <syntaxhighlight lang="php"> for($count = 0; $count < 10; $count++) { // 実行する処理 } </syntaxhighlight> <br> 実行する処理が1つのみの場合、ブロックを省略して記述してもよい。<br> <syntaxhighlight lang="php"> for(初期化式; 条件式; 変化式) 実行する処理; </syntaxhighlight> <br> なお、<code>while</code>文と同様、<code>break</code>や<code>continue</code>を使用することが可能である。<br> <br> ==== for文で複数の変数を変化させる ==== <code>for</code>文は、複数の式を記述することができる。 この場合、カンマで区切って必要な分の式を記述する。 <syntaxhighlight lang="php"> for(初期化式1, 初期化式2, ..; 条件式; 変化式1, 変化式2, ..) { 実行する処理1; 実行する処理2; } </syntaxhighlight> <br> 以下の例では、<code>for</code>文において、2つの変数の初期化式と変化式を記述している。<br> 初期化式として変数xに0、変数yに10を代入している。<br> そして、繰り返しが1回実行されるごとに、変数xの値を1加算、変数yの値を1減算している。<br> <syntaxhighlight lang="php"> for($x = 0, $y = 10; $x < 10; $x++, $y--) { print 'x='.$x.',y='.$y; } </syntaxhighlight> <br><br> == foreach文 == ==== foreach文の基礎 ==== <code>foreach</code>文は、配列に含まれる各要素の値を順に取り出す場合に使用する。<br> <br> 書式は、以下の通りである。<br> 要素を取り出す配列と、取り出した要素の値を格納する変数を指定する。<br> <code>foreach</code>文では、配列に含まれる要素の数だけ繰り返しが実行されて、1回繰り返しを行うごとに配列に含まれる要素の値を変数に代入する。<br> <syntaxhighlight lang="php"> foreach(配列変数 as 変数) { 実行する処理1; 実行する処理2; } </syntaxhighlight> <br> 以下の例では、配列の要素の値を順に取り出して表示している。 <syntaxhighlight lang="php"> $preflist = array('東京', '大阪', '名古屋'); foreach($preflist as $pref) { print $pref; } </syntaxhighlight> <br> <code>for</code>文や<code>while</code>文とは異なり、繰り返しの終了を示す条件式は存在しない。配列の要素数分を繰り返して終了する。<br> なお、<code>for</code>文や<code>while</code>文と同様、<code>break</code>や<code>continue</code>を使用することが可能である。<br> <br> <u>※注意</u><br> <u>配列の要素そのものを取り出しているわけではなく、要素の値を変数にコピーして代入しているだけである。</u><br> <u>foreach文を使用して、配列の要素の値を変更する場合は、[[PHPの基礎 - 繰り返し#foreach文で配列要素の値を変更する|次のセクション"foreach文で配列要素の値を変更する"]]を参照すること。</u><br> <br> ==== foreach文でキーと値を取り出す ==== foreach文では、要素の値の他に、キーを取り出す構文も存在する。<br> 繰り返しが1回行われるごとに、配列に含まれる要素の値を値変数に代入すると同時に、キーの値をキー変数に代入する。<br> <br> 書式は、以下の通りである。<br> <syntaxhighlight lang="php"> foreach(配列変数 as キー変数 => 値変数) { 実行する処理1; 実行する処理2; } </syntaxhighlight> <br> 以下の例では、繰り返しごとに配列の要素のキーと値を取り出して表示している。<br> <syntaxhighlight lang="php"> $preflist = array('Tokyo' => '東京', 'Osaka' => '大阪'); foreach($preflist as $key => $value) { print $key.'=>'.$value; } </syntaxhighlight> <br> ==== foreach文で配列要素の値を変更する ==== <code>foreach</code>文で要素の値を変数に格納すると、値のコピーが変数に代入される。<br> そのため、要素の値を使用することはできるが、要素の値を変更することはできない。<br> <br> 値とキーを取得して、配列変数に対して要素の値を変更することも可能であるが、以下の書式を使用することもできる。<br> <syntaxhighlight lang="php"> foreach(配列変数 as &変数) { 実行する処理1; 実行する処理2; } </syntaxhighlight> <br> 変数の前に<code>&</code>を付加することで、要素の値に対する参照を設定することができる。<br> したがって、変数に対して新しい値を代入することにより、要素の値を変更することが可能になる。<br> <br> 以下の例では、要素の値に対する参照を取得して、各要素の値を1.05倍して再度格納している。<br> <br> 最後に<code>unset</code>関数を呼び出しているのは、<code>foreach</code>文が終了しても変数valueには配列の最後の要素に対する参照が設定されたままであるため、<br> その後の処理で、誤って要素の値を変更できないように変数の割り当てを明示的に解除している。<br> <syntaxhighlight lang="php"> $pricelist = array(80, 100, 120); foreach($pricelist as &$value) { $value *= 1.05; } unset($value); </syntaxhighlight> <br><br> == while文 == ==== while文の基礎 ==== while文は、指定した条件式が真の間、繰り返しを実行する。<br> 繰り返し回数が決まっていない場合に有効な構文である。<br> <br> 書式は、以下の通りである。<br> 条件式は、if文と同様、比較演算子を使用して、x == 10、y > 15等と記述する。<br> 条件式が真である場合、ブロック内に記述された処理を実行する。<br> そして、改めて条件式を評価して、真であれば再度ブロック内の処理を実行して、偽ならばwhile文を終了する。<br> <syntaxhighlight lang="php"> while(条件式) { 実行する処理1; 実行する処理2; } </syntaxhighlight> <br> また、実行する処理が1つのみの場合は、ブロックを省略して記述してもよい。<br> <syntaxhighlight lang="php"> while(条件式) 実行する処理; </syntaxhighlight> <br> 以下の例では、変数numが2になるまで変数numの値を出力している。 <syntaxhighlight lang="php"> $num = 0; while(num < 2) { print "num=".$num; $num += 1; } </syntaxhighlight> <br> また、while文の処理の中でさらに別のwhile文を記述することもできる。<br> <br> 以下の例では、外側のwhile文が1回実行されるごとに内側のwhile文が3回実行される。<br> 2つの条件を変化させながら繰り返し処理を実行することは頻繁にある。<br> <syntaxhighlight lang="php"> $i = 0; while($i < 3) { $j = 0; while($j < 3) { print '(i, j)=('.$i.','.$j.')'; $j += 1; } $i += 1; } </syntaxhighlight> <br> == breakとcontinue == ==== break ==== 繰り返し処理の中で<code>break</code>を実行すると、繰り返し処理を終了させることができる。<br> <code>break</code>は、繰り返し処理の他に<code>switch</code>文でも使用される。<br> <br> 以下の例では、変数の値を1から100まで変化させて合計した値を表示している。<br> 合計した値が1000を越える場合は<code>break</code>を実行して、<code>while</code>文を終了している。<br> このように、<code>break</code>を使用することで任意のタイミングで<code>for</code>文や<code>while</code>文を終了することが可能となる。<br> <syntaxhighlight lang="php"> $count = 1; $sum = 0; while($count <= 100) { $sum += $count; if($sum > 1000) { print '1000を越えたので count = '.$count.' で終了します'; break; } $count += 1; } // breakが実行された時に処理が移る位置 print 'sum = '.$sum; </syntaxhighlight> <br> また、ネストされた繰り返し処理において、<code>break</code>に数値を記述すると、抜ける繰り返し処理の階層を指定することができる。<br> break <階層数>; <br> 以下の例では、<code>break</code>が実行された時に、2階層分の繰り返し処理を抜けている。<br> このように、<code>break</code>を使用することで、単純に繰り返し処理を抜けるだけではなく、何階層抜けるのかを指定することも可能である。<br> <syntaxhighlight lang="php"> $i = 1; while($i < 5) { $j = 1; while($j < 5) { if($i * $j > 15) { break 2; } $j += 1; } $i += 1; } // breakが実行された時に処理が移る位置 </syntaxhighlight> <br> ==== continue ==== 繰り返し処理の中で<code>continue</code>を実行する時、繰り返し処理のブロック内でそれ以降の処理を実行せずに、次の条件式の評価を行う。<br> <br> 以下の例では、変数の値を1から100まで変化させて合計した値を出力している。<br> <code>while</code>文の処理の中で、加算しようとする値が2の倍数である場合は、加算を行わずに次の条件式の評価へ処理が移る。<br> このように、<code>continue</code>を使用することにより、細かく繰り返し処理を制御することが可能となる。<br> <syntaxhighlight lang="php"> $count = 0; $sum = 0; while($count < 100) { $count += 1; if($count % 2 == 0) { continue; } $sum += $count; } print 'sum = '.$sum; </syntaxhighlight> <br> また、ネストされた繰り返し処理において、<code>break</code>と同様に階層数を指定することで、何階層を抜けて条件式の評価に戻るのかを指定することができる。<br> <syntaxhighlight lang="php"> continue <階層数>; </syntaxhighlight> <br> 以下の例では、<code>continue</code>が実行された時、2階層分の残りの繰り返し処理を飛ばして、外側(while文)の条件式の評価に処理が移る。<br> <code>break</code>と同様、<code>continue</code>を使用することにより、繰り返し処理の制御をより細かく行うことができる。<br> <syntaxhighlight lang="php"> $count1 = 0; $sum = 0; while($count1 < 10) { $count1 += 1; $count2 = 0; while($count2 < 10) { $count2 += 1; if($count1 * $count2 > 30) { continue 2; } $sum += $count1 * $count2; } } print 'sum = '.$sum; </syntaxhighlight> <br><br> == do..while文 == <code>do..while</code>文は、必ず1回は処理を行う場合に有効な構文である。<br> <br> 書式は、以下の通りである。<br> <syntaxhighlight lang="php"> do { 実行する処理1; 実行する処理2; }while(条件式); </syntaxhighlight> <br> <code>do..while</code>文では、まず、ブロック内の処理が実行された後で条件式の評価が行われる。<br> そのため、少なくとも1回は必ずブロック内の処理が実行される。<br> 条件式の評価が真であれば再度先頭に戻りブロック内の処理を実行して、偽ならば<code>do..while</code>文を終了する。<br> <br> 実行される処理が1つのみの場合は、ブロックを省略して記述してもよい。<br> <syntaxhighlight lang="php"> do 実行する処理; while(条件式); </syntaxhighlight> <br> 以下の例では、変数numが2になるまで変数numの値を出力している。<br> <syntaxhighlight lang="php"> $num = 0; do { print "num=".$num; $num += 1; }while(num < 2); </syntaxhighlight> <br> なお、<code>for</code>文や<code>while</code>文と同様、<code>break</code>や<code>continue</code>を使用することが可能である。<br> <br><br> __FORCETOC__ [[カテゴリ:Web]]
PHPの基礎 - 繰り返し
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse