PHP - BASIC - 5. PHPの反復構造 - 5. ネストしたループ

while 文や for 文のような反復構造の中に、また別の反復構造を定義することもできます。このような構造をネストしたループなどと呼びます。ここでは次のプログラム( loop6.php )を作成してみましょう。
<?php
for ($i = 0; $i < 3; $i++) {
for ($j = 0; $j < 3; $j++) {
echo $i + $j;
echo " ";
}
echo PHP_EOL;
}
このプログラムでは外側の for 文でカウンター変数 $i の値が 3 より小さい間、処理を繰り返すように定義してます。またfor文の処理ブロック {} の中では、もう一つ別の for 文を定義しており、カウンター変数を $j とし、 $j も 3 より小さい間、処理を繰り返すように定義しています。
このように
for文がネストする場合は、ネストした内側のfor文のカウンター変数に$iを使うことができないため、$jのような名前を付けることが多いです。
ネストした for 文の実行時の処理の流れをまとめると次のようになります。
変数 $i |
変数 $j |
echo $i + $j による出力 |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 0 | 2 | 2 |
| 1 | 0 | 1 |
| 1 | 1 | 2 |
| 1 | 2 | 3 |
| 2 | 0 | 2 |
| 2 | 1 | 3 |
| 2 | 2 | 4 |
上記の表を見ると $i が 0 の時点で内側の for 文の $j が 0〜2 までループします。次に外側の for 文の $i がインクリメントされて $i は 1 となり、内側の for 文の $j が 0〜2 までループします。さらに外側の for 文の $i がインクリメントされて $i は 2 となり、内側の for 文の $j が 0〜2 までループします。
それではプログラムを実行してみましょう。
$ php loop6.php
0 1 2
1 2 3
2 3 4
まとめ
- 反復構造の中で反復構造を定義できる
- このような入れ子構造をネストと呼ぶ
- ネストした反復構造のカウンター変数には
$i、$j、$kと名前をつけることが一般的