foreachで配列を処理しているとき、目的の要素が見つかったらそこで処理を打ち切りたいことがあります。そんなときは break 文を使います。この記事では基本の使い方に加え、continue との違い、多重ループを一気に抜ける break 2、そしてswitch文の中での break の落とし穴まで解説します。
この記事の結論:
break でループ自体を終了します。次の要素へスキップしたいだけなら continue です。入れ子のループをまとめて抜けるには break 2 のように数値を付けます。breakでループを途中終了する
条件を満たしたところで break を実行すると、それ以降の要素は処理されずループが終わります。
指定の値が見つかったら終了
<?php
$fruits = ["apple", "banana", "orange", "grape", "peach"];
foreach ($fruits as $fruit) {
if ($fruit === "orange") {
echo "orange を発見、ループ終了\n";
break; // ここでループを抜ける
}
echo "確認中: $fruit\n";
}
echo "ループ終了後の処理\n";
// 出力: apple, banana を確認 → orange発見で終了(grape/peach は処理されない)
breakとcontinueの違い
よく混同されますが、break はループ自体を終了、continue はその回だけ飛ばして次の要素へ進む、という違いがあります。
| 文 | 動作 |
|---|---|
break |
ループを終了し、ループの後ろへ抜ける |
continue |
今回の処理を中断し、次の繰り返しへ進む |
「特定の要素だけ飛ばして処理を続けたい」場合は
continue を使います。詳しくはforeachループをcontinueでスキップする方法を参照してください。多重ループをまとめて抜ける(break N)
break は現在のループ1つだけを終了します。入れ子になったループを外側まとめて抜けたい場合は、break 2 のように抜けたい階層の数を指定します。
break 2 で二重ループを脱出
<?php
foreach (["a", "b"] as $x) {
foreach ([1, 2, 3] as $y) {
if ($y === 2) {
echo "$x-$y で二重ループを脱出\n";
break 2; // 内側・外側の両方を抜ける
}
echo "$x-$y\n";
}
}
echo "完了\n";
// 出力: a-1 → a-2 で break 2 → 完了(b は処理されない)
break(=break 1)は内側のループだけを抜けます。break 2 は内側と外側の2階層を抜けます。抜けたいループの数に合わせて数値を指定してください。注意:switchの中のbreakはループを抜けない
意外な落とし穴が、ループの中で switch を使っているケースです。PHPでは switch も break の対象になるため、switch 内の break はswitchを抜けるだけでループは続きます。
switch内のbreakはループを止めない
<?php
foreach ([1, 2, 3, 4, 5] as $n) {
switch ($n) {
case 3:
echo "3 で break\n";
break; // ← switch を抜けるだけ。ループは続く
default:
echo "n=$n\n";
}
}
// 出力: n=1, n=2, 3でbreak, n=4, n=5(ループは止まらない)
switch内からループを抜けたいときは
break 2 を使います。switch が1階層、foreach が2階層目とカウントされるためです。この挙動を知らないと「breakしたのにループが止まらない」とハマりやすいので注意してください。よくある質問(FAQ)
Qbreakとcontinueはどう違いますか?
A
break はループ自体を終了してループの後ろへ進みます。continue は今回の繰り返しだけを飛ばして次の要素へ進みます。ループを止めるか、飛ばして続けるかの違いです。Q入れ子のforeachを一度に抜けるには?
A
break 2 のように、抜けたいループの階層数を指定します。break だけ(break 1)では一番内側のループしか抜けません。Qbreakしたのにループが止まりません。
Aループの中で
switch を使っていませんか。switch 内の break はswitchを抜けるだけです。ループも抜けるには break 2 を使ってください。Qbreak は for や while でも使えますか?
まとめ
PHPのforeachをbreakで終了するポイントを整理します。
breakでループ自体を終了する- 飛ばして続けたいだけなら
continue - 入れ子のループは
break 2でまとめて抜ける - switch内の
breakはループを抜けない(break 2が必要) breakは for・while・do-while でも同様に使える
関連として、continueでスキップする方法・foreachで配列を順番に操作する方法・do-while文でループ処理を行う方法もあわせて読むと、PHPのループ制御に強くなれます。

