PHP、JS ループ処理内のbreak,continue
作成日:2019-03-19, 更新日:2019-03-19
基本
・break - ループから抜ける
・continue - 以後のループ内の処理は無視
| ソース | breakの流れ | continueの流れ |
|---|---|---|
for (〇〇〇) {
処理A
if ( 条件 ) {
break; // or 「continue」
}
処理B
}
|
1.「処理A」を実行 2.「条件」が ・「真」ならループを抜ける、 ・「偽」なら「処理B」を実行 3.「1」にもどる |
1.「処理A」を実行 2.「条件」が ・「真」なら「1」へ、 ・「偽」なら「処理B」を実行 3.「1」にもどる |
ループ内のループでbreak,continue
・ループ内でループをさせて、その中でbreak,continueを使いたいって時
▼ループ内でループさせる
for (〇〇〇) { // ループ処理1
for (〇〇〇) { // ループ処理2
処理A
if ( 条件 ) {
break; // or 「continue」
}
処理B
}
}
→breakにしてもcontinueにしても「ループ処理2」が対象となる。
子のループではなく、親のループから抜けたい
・break(or continue)で「ループ処理2」ではなく「ループ処理1」を対象したい。
PHP
・「break 2」などのように親の階層を指定
for (〇〇〇) { // ループ処理1
for (〇〇〇) { // ループ処理2
if ( 条件1-1 ) {
break 2; // 2つ上のループを抜ける→「ループ処理1」を抜ける
}
else if (条件1-2) {
break; // ループを抜ける→「ループ処理2」を抜ける
}
if ( 条件2-1 ) {
continue 2; // 2つ上のループまで以後の処理をスキップ→「ループ処理1」に戻る
}
else if (条件2-2) {
continue; // ループまで以後の処理をスキップ→「ループ処理2」に戻る
}
}
}
Javascript
・ラベルを作り、「break ラベル」などのように指定する。
loop_p: for (〇〇〇) { // ループ処理1
loop_c: for (〇〇〇) { // ループ処理2
if ( 条件1-1 ) {
break loop_p; // 「ラベル:loop_p」を抜ける
}
else if (条件1-2) {
break loop_c; // 「ラベル:loop_c」を抜ける
}
if ( 条件2-1 ) {
continue loop_p; // 「ラベル:loop_p」に戻る
}
else if (条件2-2) {
continue loop_c; // 「ラベル:loop_c」に戻る
}
}
}