多重ループを1行で抜ける方法【PHP】
- 2020.03.09
- PHP

通常、ループを途中で抜ける場合breakを使うが、ループの中にループがあるような多重ループを抜けるには、C言語ならgotoを使ったり、Javaならラベル指定付きbreakを使ったりと特殊な方法を使うこともある。
PHPでは、goto文もラベル指定付きbreak文もサポートされていないので、変数を用意して2回breakしなければならいと思っている人も意外といるが、PHPではbreak 2;というように値を指定して多重ループを抜けることができる。
Advertisement
多重ループからbreakで抜ける方法
例えば、以下のように変数を使って2回breakしているコードがあるとする。
<?php $break_flag = false; //多重ループから抜けるためのフラグ for($i = 0; $i<5; $i++){ for($j=0; $j<5; $j++){ echo "({$i}, {$j})<br>\n"; if($i == 2 && $j == 4){ $break_flag = true; break; } } if($break_flag) break; } ?>
このコードは以下のように書くことができる。
<?php for($i = 0; $i<5; $i++){ for($j=0; $j<5; $j++){ echo "({$i}, {$j})<br>\n"; if($i == 2 && $j == 4){ break 2; } } } ?>
breakで値が指定できるように、continue文でも指定することができる。
<?php for($i = 0; $i<5; $i++){ for($j=0; $j<5; $j++){ echo "({$i}, {$j})<br>\n"; if($j == 2){ continue 2; } } } ?>
このコードを実行すると以下のようになる。
(0, 0) (0, 1) (0, 2) (1, 0) (1, 1) (1, 2) (2, 0) (2, 1) (2, 2) (3, 0) (3, 1) (3, 2) (4, 0) (4, 1) (4, 2)
これはbreak 1;やcontinue 3;など2以外の値でもできる。
Advertisement
-
前の記事
PostgreSQLでテーブルにカラムを追加する方法 2020.03.08
-
次の記事
count関数の第2引数にCOUNT_RECURSIVEを渡した時の返り値について【PHP】 2020.03.10