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と名前をつけることが一般的