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」に戻る } } }