【PHP】break文 - 反復処理・条件分岐処理の強制終了(for/foreach/while/do-while/switch)

【PHP】break文 - 反復処理・条件分岐処理の強制終了(for/foreach/while/do-while/switch)

反復処理や条件分岐処理を強制的に終了するbreak文があります。

break文はfor文やforeach文、while文など特定の構文の中で使用が可能です。

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

検証環境

break文

break文は反復処理や条件分岐処理を強制終了します。

特定構文(for文、foreach文、while文、do-while文、switch文)の中で使用が可能で、break文が実行されると一番近いブロック(波括弧{})の処理を終了します。

基本構文

break;

構文はシンプルですが、特定構文の中でのみ利用でき、それ以外に記述するとエラーが発生します。

サンプル

break文が使用できるfor文、foreach文、while文、do-while文、switch文について、各サンプルを示します。

for文

<?php

for( $i = 0; $i < 10; $i++ ) {
    echo $i."回目\n";
    if( $i == 3 ) {
        ___ih_hl_start
        break;
        ___ih_hl_end
    }
}

?>
$ php sample1.php
0回目
1回目
2回目
3回目

3行目のfor文は初期化式、条件式、変化式から10回繰り返すように見えます。

しかし、4行目のif文によって$i3の時にbreakを実行し、for文を強制終了するため、繰り返し回数は4回となります。

foreach文

<?php

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

foreach( $fruits as $data ) {
    echo $data."\n";
    if( $data == 'Grape' ) {
        ___ih_hl_start
        break;
        ___ih_hl_end
    }
}

?>
$ php sample2.php
Apple
Orange
Grape

10行目のforeach文は$fruitsから'Grape'の値を取り出した回でbreakを実行し終了します。

while文

<?php

while( true ) {
    echo "Loop.\n";
    ___ih_hl_start
    break;
    ___ih_hl_end
}

?>
$ php sample3.php
Loop.

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

do-while文

<?php

do {
    echo "Loop.\n";
    ___ih_hl_start
    break;
    ___ih_hl_end
} while( true );

?>
$ php sample4.php
Loop.

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";
    default:
        echo "default\n";
}

?>
$ php sample5.php
case1
case2
case3

case 1から実行しますが、case 3の最後にbreakが実行されるため、以降のcase 4defaultは実行されません。

演習問題

問題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
.................