Codeworks Notes

 2020-04-30

 2020-05-01

PHP
PHP基礎
プログラミング

ループ処理 [ for ]

for 文とは同じ処理を繰り返すための構文です。
同様の処理を行えるものに while 文がありますが、for 文との違いについては後述します。まずは書式から。

for 文の書式

for ( 初期値; 条件式; 更新式 ) {
  // 処理内容
}

これだけだとピンと来ないかもしれません。
実際に値を当てはめてみましょう。

記述例

for ( $i = 0; $i <= 5; $i++ ) {
  echo $i."<br />"    // $i を出力する
}

出力結果

0
1
2
3
4
5

解説

初期値に「 $i = 0 」を指定しており、この時の $i をカウンタと呼びます。
条件式の「 $i <= 5 」は $i が 5 以下なら処理を行うが 6以上になったら処理をせずにループを抜ける、という条件指定です。
更新式 の「 $i++ 」はループ内の処理を 1 回行ったらカウンタを 1 増やします。

この場合、echo で $i の値を出しながら $i が 5 になるまで echoを繰り返すことになります。

実用的な例

こんな HTML ソースがあったとします。

<form method="post" action="">
  <label for="birth">生まれ月</label>
  <select id="birth" name="month">
    <option>1月生まれ</option>
    <option>2月生まれ</option>
    <option>3月生まれ</option>
    <option>4月生まれ</option>
    <option>5月生まれ</option>
    <option>6月生まれ</option>
    <option>7月生まれ</option>
    <option>8月生まれ</option>
    <option>9月生まれ</option>
    <option>10月生まれ</option>
    <option>11月生まれ</option>
    <option>12月生まれ</option>
  </select>
</form>

for 文を使って書き換えるとこうなります。

<form method="post" action="">
  <label for="birth">生まれ月</label>
  <select id="birth" name"month">
  <?php for ( $i = 1; $i <= 12; $i++ ) {
    echo "<option>" . $i . "月生まれ</option>"
  ?>
  </select>
</form>

出力結果

このように「同じものを繰り返し書いてるな〜」とだいたい感じるところは for 文ですっきり短く書けて、書く手間を大幅に省けます。

break と continue について

break とは

ループの途中で、特定の条件の時にループから抜けたいときに break 文を使います。

記述例

for ( $i = 0; $i <= 10; $i++ ) {
  if ( $i == 5 ) {  // $i が 5 の時に処理する
    break;      // for文から抜ける
  }
  echo $i."<br />"    // $i を出力する
}

出力結果

0
1
2
3
4

5 以降が出力されていないのは $i のカウントが 5 になった際に if 文の中にある break が実行されてループから抜けたためです。
このように特定の条件でループから抜ける時に break 文を使います。

continue とは

ループを抜けずに特定の条件の時にだけ処理をスキップしたいときに continue 文を使います。

記述例

for ( $i = 0; $i <= 10; $i++ ) {
  if ( $i == 5 ) {  // $i が 5 の時に処理する
    continue;    // スキップして次のループに入る
  }
  echo $i."<br />"    // $i を出力する
}

出力結果

0
1
2
3
4
6
7
8
9
10

$i のカウントが 5 になった際に if 文の中にある continue が実行されて処理がスキップされるので、5 だけ echo されていないことが分かります。
このように特定の条件でループをスキップする時に continue 文を使います。

注意点

カウンタの入れ忘れや条件式に誤りがあると無限ループに陥ることがあります。正しく表示できない上にサーバに負荷が掛かりますので注意しましょう。

for 文と while 文の違い

同じ処理を繰り返すための構文には for 文のほかに while 文があります。
どちらも同じような処理ができますが、使い分けるために違いを知っておきましょう。

  • for 文
    繰り返す回数が分かっているものに使う
  • while文
    何回繰り返すか分からないものに使う

60回繰り返す、とか100回繰り返す、などあらかじめ反復回数が分かっている場合は条件式に上限を指定する for 文が有効です。しかし、データベースから値を抽出して「条件に合うものが無くなるまで繰り返す」などの処理は何回目で終わるか分からないため while 文を使います。