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