ループ繰り返し処理のfor文
PHPのforもwhileと同様に条件にもとづいて繰り返しループ処理を行う構文です。
違いはwhileが「継続条件」の指定だけが必須だったのに対しforは「初期化」「継続条件」「条件の変更」の入力化が必須となっている点が大きな違いです。
ループ繰り返し処理 for文の基本構文
for(①初期化; ②継続条件; ③条件の変更){
繰り返したい処理
}
①初期化→ループ全体の最初に1度実行される
②継続条件→毎回ループの最初で評価されtrueなら処理をする
③条件の変更→ループとループの間に実行される
ループ繰り返し処理 for文のサンプルソースコード
同じ処理を10回繰り返す例を示します
for文で10回処理を繰り返す
変数$iを0~9まで1ずつ増やしながら処理を10回繰り返すサンプルです。
for($i=0; $i<10; ++$i){
echo ($i+1) . "回目のループです" . PHP_EOL;
}
出力結果
1回目のループです
2回目のループです
3回目のループです
4回目のループです
5回目のループです
6回目のループです
7回目のループです
8回目のループです
9回目のループです
10回目のループです
このfor()の中の部分の記述は多くの文献で紹介されているテンプレートのようなものですが、あくまでそれぞれ式ですので、実行タイミングさえ押さえておけば自由に記述することができます。
for文で10ずつカウントアップして処理する
次の例では変数の値が1ずつではなく0,10,20と10ずつカウントアップして処理が実行されます。
for($count=0; $count<=30; $count+=10){
echo ($count) . "カウント" . PHP_EOL;
}
出力結果
0カウント
10カウント
20カウント
30カウント
for文で配列をループする
for文で配列をすべての要素をループさせて処理をすることもできます。
ループをインデックス0から始めて配列のサイズをcount()で取得し、その値まで進めます。
for文で配列をループするサンプルソースコード
$list = array(
"1番目", //インデックス0
"2番目", //インデックス1
"3番目", //インデックス2
);
for($index=0; $index<count($list); ++$index){ //配列のインデックスを順番にループ
echo $list[$index] . PHP_EOL;
}
出力結果
1番目
2番目
3番目
配列の場合はfor文よりも次の章で紹介するforeachを使うほうが一般的ではあります。
for文のスキップ(continue)
ある条件を満たすときだけ処理をスキップしたい、というときはcontinueを使います。
continueのサンプルソースコード
$max = 5;
for($i=0; $i<$max; ++$i){
if($i >= 3){ //$iが3以上ならスキップする
echo "スキップ" . PHP_EOL;
continue;
}
echo ($i+1) . "/{$max}回目のループです" . PHP_EOL;
}
出力結果
1/5回目のループです
2/5回目のループです
3/5回目のループです
スキップ
スキップ
continueは直近の条件分岐やループ処理をスキップします。具体的にはswitch/for/foreach/whileです。
for文の強制終了・脱出(break)
while自体のループ実行条件とは別に、ある条件を満たすとループ処理を中断して終了させたいといったときはbreakを使います。
breakのサンプルソースコード
$max = 5;
for($i=0; $i<$max; ++$i){
if($i >= 3){ //$iが3以上なら脱出する
echo "脱出" . PHP_EOL;
break;
}
echo ($i+1) . "/{$max}回目のループです" . PHP_EOL;
}
出力結果
1/5回目のループです
2/5回目のループです
3/5回目のループです
脱出
breakは直近の条件分岐やループ処理を中断します。具体的にはswitch/for/foreach/whileです。
【応用】九九表を出力
プログラミング学習や課題試験でよくあるループ繰り返し処理を使って「九九表」を作ってみます。
for文を使って九九表を作成するサンプルソースコード
$html_body = ""; //九九表メイン部分
//99表の段を1行ずつループして作成
for($row=1; $row<=9; ++$row){
$html_row = "";
//○の段の1行を列をループして作成
for($col=1; $col<=9; ++$col){
//最初のループだけ左の「○の段」の見出しを作成
if($col == 1){
$html_row .=<<<EOF
<th>
{$row}の段
</th>
EOF;
}
//99の計算結果のセルを作成
$row_x_col = $row * $col;
$html_row .=<<<EOF
<td>
{$row_x_col}
</td>
EOF;
//echo $row * $col . PHP_EOL;
}
//上記ループで作成した○の段の1行を九九表メイン部分に追記
$html_body .=<<<EOF
<tr>
{$html_row}
</tr>
EOF;
}
//九九表メイン部分にヘッダなどを加えて完成
$html =<<<EOF
<table>
<caption>99表</caption>
<thead>
<th></th>
<th>×1</th>
<th>×2</th>
<th>×3</th>
<th>×4</th>
<th>×5</th>
<th>×6</th>
<th>×7</th>
<th>×8</th>
<th>×9</th>
</thead>
<tbody>
{$html_body}
</tbody>
</table>
EOF;
echo $html;
サンプルで出力した九九表
×1 | ×2 | ×3 | ×4 | ×5 | ×6 | ×7 | ×8 | ×9 | |
---|---|---|---|---|---|---|---|---|---|
1の段 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
2の段 | 2 | 4 | 6 | 8 | 10 | 12 | 14 | 16 | 18 |
3の段 | 3 | 6 | 9 | 12 | 15 | 18 | 21 | 24 | 27 |
4の段 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | 32 | 36 |
5の段 | 5 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 |
6の段 | 6 | 12 | 18 | 24 | 30 | 36 | 42 | 48 | 54 |
7の段 | 7 | 14 | 21 | 28 | 35 | 42 | 49 | 56 | 63 |
8の段 | 8 | 16 | 24 | 32 | 40 | 48 | 56 | 64 | 72 |
9の段 | 9 | 18 | 27 | 36 | 45 | 54 | 63 | 72 | 81 |
コメント