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

  • 2020.03.09
  • PHP
多重ループを1行で抜ける方法【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