第4章 制御構文 / 第3回 模擬試験
次のコードの実行結果として正しいものはどれか。 ```php outer: for ($i = 0; $i < 3; $i++) { for ($j = 0; $j < 3; $j++) { if ($j == 1) { continue 2; } print "$i-$j "; } } ```
0-0 0-1 0-2 1-0 1-1 1-2 2-0 2-1 2-2
0-0 1-0 2-0
正解
0-0 0-1 1-0 1-1 2-0 2-1
エラーが発生する
解説
`continue 2;`は、内側のループだけでなく「2段階外側」までを対象にスキップを行います(自分自身のループを1段階目として数えます)。`$j == 1`になった時点で内側の`for`ループを打ち切り、外側の`for`ループの次のイテレーション(`$i`のインクリメント)へ進みます。
そのため、内側ループは各`$i`につき`$j = 0`のときの`print`しか実行されず、出力は`0-0 1-0 2-0 `になります。
例:
```
for ($i = 0; $i < 3; $i++) {
for ($j = 0; $j < 3; $j++) {
if ($j == 1) {
continue 2;
}
print "$i-$j ";
}
}
// 出力: 0-0 1-0 2-0
```
`continue`(引数なし、`continue 1`と同じ)は内側ループだけをスキップしますが、`continue 2`は外側ループの残り(この例では`$j`のループ全体)もまとめてスキップする点が違いです。
(参照: 独習PHP 第4版 第4章 制御構文 4.3.3節 入れ子のループを中断/スキップする p.155〜156)
関連する問題
- 次のコードの実行結果として正しいものはどれか。 ```php $num = ['zero', 'one', 'three']; $num[3] = 'four'; $num[2] = 'two'; print ('【loop_A】'); for ($i = 0, $count_num = count($num); $i < $count_num; $i++) { print ($num[$i] . ','); } print ('【loop_B】'); foreach ($num as $i => $n) { print ($i . ','); } ```
- PHPの条件分岐に関する次の記述のうち、誤っているものはどれか。
- 次のコードの実行結果として正しいものはどれか。 ```php $i = 1; while ($i <= 5) { print $i; $i++; } ```
- PHPのループ制御に関する次の記述のうち、正しいものはどれか。
- PHPの条件分岐に関する次の記述のうち、正しいものはどれか。