ITHACK
~ みんなのIT部門 ~

【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文


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

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文を中断する
$ php practice.php
--- please input ---
> 1
> 2
> 3
> 4
> 5
> 6
> 7
> 8
> 9
> 0
total : 45
$ php practice.php
--- please input ---
> 11
> 22
> 33
> 44
> 55
> 66
> 77
> 88
> 99
> 0
total : 495

問題2

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

  • 商品の料金は『単価×個数』とする
  • 商品名、単価、個数は標準入力で入力する
  • 商品名、単価、個数のいずれかに空入力が入力された時点で、入力を終了する
    ※ 空入力 = 何も入力せずにEnterキーを押す
$ php practice.php
<<<< 商品入力 >>>>
商品名 > 炭酸水
単価  > 150
個数  > 2
商品名 > 弁当
単価  > 560
個数  > 2
商品名 > お菓子
単価  > 300
個数  > 7
商品名 > 

<<<<  会計  >>>>
---- 合計料金 ----
3520
----  明細  ----
商品名 : 炭酸水
単価  : 150
個数  : 2
.................
商品名 : 弁当
単価  : 560
個数  : 2
.................
商品名 : お菓子
単価  : 300
個数  : 7
.................
$ php practice.php
<<<< 商品入力 >>>>
商品名 > ローストビーフ
単価  > 1500
個数  > 2
商品名 > ワイン
単価  > 500
個数  > 4
商品名 > 牡蠣
単価  > 600
個数  >  

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

まとめ

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