PHP入門

【PHP入門】ループの中断・スキップ(break文、continue文)

2021年6月16日

はじめに

前回の記事では、while文を使った繰り返し処理について紹介しました。

本記事では、ループを中断するbreak文、ループ処理の途中で、残りの処理をスキップして次のループ処理に移るcontinue文について紹介します。

繰り返しを中断する(break文)

for文やwhile文などの繰り返しを途中で中断するには break(読み:ブレイク)文 を使います。

スポンサーリンク

break文の使用例

それでは、実際にPHPのプログラムでbreak文を使ったループの中断について紹介します。

次の例では、配列「$moneys」の要素数分 繰り返し処理を行い、変数「$total」に配列の値を加算。そして 変数「$total」が500を超えたらループを途中で中断しています。

[break文の使用例]

<?php

$moneys = array(100,200,500,1000);
$total = 0;

foreach ($moneys as $value) {
    $total += $value;
    
    if ($total > 500) {
        break;
    }
}

print("合計金額:$total");

?>

[実行結果]

合計金額:800

多重ループを一気に抜ける

ループの中でbreak文を使うと、そのループを中断させることができますが、多重ループの内側でbreak文を使っても内側のループを抜けるだけです。

while (条件) {

while (条件) {

break;  // 内側のループを抜けるだけ

}

}

PHPのbreakはオプションの引数で、ネスト(条件分岐やループ)したループ構造を抜ける数を指定することができます。たとえば、二重ループを一気に抜けたい場合は「break 2」のように記述します。

while (条件) {

while (条件) {

break 2;  // 二重ループを一気に抜ける

}

}

繰り返しを中断し、次の回に移る(continue文)

for文やwhile文などの繰り返しを途中で中断するbreak文に対し、continue文はループそのものを中断するのではなく、continue以降の処理をスキップし、次の回に移ります。

ある条件のときだけ、ループ内の処理をしたくないという時に「continue」を使います。

スポンサーリンク

continue文の使用例

それでは、実際にPHPのプログラムでcontinue文の使用例を紹介します。

次の例では「$i == 2」の条件に一致するときだけ、continue以降の処理をスキップしています。

ループを抜ける(中断する)break文とは違い、continue文はcontinue以降の処理をスキップし次の回に移るので、ループからは抜けません。

[continue文の使用例]

<?php

for($i = 0; $i < 5; $i++) {
    if ($i == 2) {
        continue;
    }
    
    print("iの値: $i<br />");
}

?>

[実行結果]

iの値: 0
iの値: 1
iの値: 3
iの値: 4

多重ループをスキップ

continue文では、break文同様にオプションの引数で処理をスキップするループ構造の数を指定できます。

以下は「continue」と「continue 2」の動きの違いのイメージ例です。

■多重ループ内での「continue」の動き

while (条件1) {

while (条件2) {

continue;  // 以降の処理をスキップし、次の回(条件2)に移る

( 処理1 )

}

( 処理2 )

}

■多重ループ内での「continue 2」の動き

while (条件1) {

while (条件2) {

continue 2;  // 以降の処理をスキップし、次の回(条件1)に移る

( 処理1 )

}

( 処理2 )

}

「continue」の場合は、一番近いループ「while (条件2)」に戻るが、「continue 2」の場合は、2番目に近い(※引数で指定した数分)ループ「while (条件1)」に戻ります。

次の例では、二重ループの中で「continue 2」を使用しています。

[スキップする数を指定した場合の例]

<?php

for($i = 0; $i < 3; $i++) {
    print("iの値 : $i<br />");

    for($j = 0; $j < 3; $j++) {
        print("jの値 : $j<br />");

        if ($i + $j == 1) {
            print("条件一致<br />");
            continue 2;
        }

        print("処理1<br />");
        
    }

    print("処理2<br />");
}

?>

[実行結果]

iの値 : 0
jの値 : 0
処理1
jの値 : 1
条件一致
iの値 : 1
jの値 : 0
条件一致
iの値 : 2
jの値 : 0
処理1
jの値 : 1
処理1
jの値 : 2
処理1
処理2

終わりに

本記事では、ループを中断するbreak文、ループ処理の途中で、残りの処理をスキップして次のループ処理に移るcontinue文について紹介しました。

次回の記事では、PHPの条件分岐(switch文)について紹介します。

helpful