【PHP】break文 – 繰り返し処理や分岐処理を中断する – 全種類(for/foreach/while/do-while/switch)

繰り返し処理や分岐処理を中断するbreak文と呼ばれる仕組みがあります。
break文はfor文やforeach文、while文、do-while文、switch文で使うことができます。

ここではbreak文について解説します。

なお、for文 / foreach文 / while文 / do-while文 / switch文については次の記事をご覧ください。

★ 内容

  • break文

break文とは

break文とは繰り返し処理や分岐処理を中断するための仕組みです。
for文、foreach文、while文、do-while文、switch文のブロック(波括弧{})で使うことができます。

基本構文

break文の基本構文は次のようになります。

break;

プログラム実行時にbreakが実行されると、一番近いブロックの処理が中断されます。

サンプルコード

サンプルコードでbreakの動作を確認していきましょう。

for文

ソースコード

<?php

for( $i = 0; $i < 10; $i++ ) {
    if( $i == 3 ) {
        break;
    }
    echo $i."回目の繰り返し処理\n";
}

?>

実行結果

0回目の繰り返し処理
1回目の繰り返し処理
2回目の繰り返し処理

for文は10回繰り返す記述になっていますが、実行結果では3回分の出力のみになっています。
これは4回目の繰り返し処理でブロックのif文の条件式が真(true)になり、breakが実行されているためです。

break文を実行すると一番近いブロックの処理中断するため、for文が終了します。

foreach文

ソースコード

<?php

$fruits = [
    'Apple',
    'Orange',
    'Grape',
    'Melon',
];

foreach( $fruits as $data ) {
    if( $data == 'Grape' ) {
        break;
    }
    echo "この果物は".$data."です。\n";
}

?>

実行結果

この果物はAppleです。
この果物はOrangeです。

foreach文のbreak文もfor文と同様に繰り返し処理を中断します。

while文

ソースコード

<?php

while( true ) {
    echo "繰り返し処理を実行しました\n";
    break;
}

?>

実行結果

繰り返し処理を実行しました

while文の条件式はtrueのため、無限ループになりますが、breakが必ず実行されるため、繰り返し処理は1度だけ実行されます。

do-while文

ソースコード

<?php

do {
    echo "繰り返し処理を実行しました\n";
    break;
} while( true );

?>

実行結果

繰り返し処理を実行しました

while文のbreakと同様に、繰り返しの条件式がtrueで固定値なので無限ループしそうですが、必ずbreak文が実行されるので、繰り返し処理は1度だけ実行されます。

switch文

ソースコード

<?php

$data = 1;
switch( $data ) {
    case 0:
        echo "case0が実行されました\n";
    case 1:
        echo "case1が実行されました\n";
    case 2:
        echo "case2が実行されました\n";
    case 3:
        echo "case3が実行されました\n";
        break;
    case 4:
        echo "case4が実行されました\n";
}

?>

実行結果

case1が実行されました
case2が実行されました
case3が実行されました

case 1から実行されていますが、case 3の最後にbreak文の記述があります。
これにより中断されるため、case 4以降の処理は実行されません。

演習問題

問題1

解答例

複数の数値の合計値を出力するプログラムを作成してください。
なお、下記条件を満たすものとします。

  • 数値は標準入力で0が入力されるまでwhile文で繰り返し受け取る
  • 0を受け取ったらbreak文でwhile文を中断する

実行例1

コマンドライン

--- please input ---
> 1
> 2
> 3
> 4
> 5
> 6
> 7
> 8
> 9
> 0
total : 45

実行例2

コマンドライン

--- please input ---
> 11
> 22
> 33
> 44
> 55
> 66
> 77
> 88
> 99
> 0
total : 495

問題2

解答例

次の実行例になるような複数商品の合計料金を出力するプログラムを作成してください。
なお、下記条件を満たすものとします。

  • 商品の料金は『単価×個数』とする
  • 商品名、単価、個数は標準入力で入力する
  • 商品名、単価、個数のいずれかに空入力が入力された時点で、入力を終了する
    ※ 空入力 = 何も入力せずにEnterキーを押す

実行例1

コマンドライン

<<<< 商品入力 >>>>
商品名 > 炭酸水
単価  > 150
個数  > 2
商品名 > 弁当
単価  > 560
個数  > 2
商品名 > お菓子
単価  > 300
個数  > 7
商品名 > 

<<<<  会計  >>>>
---- 合計料金 ----
3520
----  明細  ----
商品名 : 炭酸水
単価  : 150
個数  : 2
.................
商品名 : 弁当
単価  : 560
個数  : 2
.................
商品名 : お菓子
単価  : 300
個数  : 7
.................

実行例2

<<<< 商品入力 >>>>
商品名 > ローストビーフ
単価  > 1500
個数  > 2
商品名 > ワイン
単価  > 500
個数  > 4
商品名 > 牡蠣
単価  > 600
個数  >  

<<<<  会計  >>>>
---- 合計料金 ----
5000
----  明細  ----
商品名 : ローストビーフ
単価  : 1500
個数  : 2
.................
商品名 : ワイン
単価  : 500
個数  : 4
.................

まとめ

break文は特定構文の処理を中断します。
プログラミングでは多々使われることがありますので、覚えておきましょう。