PHPでforeach()などのループ処理中に、不要な値をスキップするcontinueと、特定の値で処理を終了させるbreakの使い方をご紹介します。
continue文で特定の値をスキップする
ループ処理中に、配列の中にある不要な値をスキップしたい時があります。
そんな時は条件分岐でcontinueを使えば、簡単に特定の値をスキップできます。
下記サンプルは$status配列の中から、つよさのパラメーターだけ不要なのでスキップしています。
|
1 2 3 4 5 6 7 8 9 |
$status = array('なまえ'=>'えにくす', 'せいべつ'=>'おとこ', 'レベル'=>5, 'つよさ'=>20 'HP'=>26, 'MP'=>11,); foreach ($status as $key => $val) { if ($key == 'つよさ') { continue; } else { echo $key.':'.$val.'<br>'; } } |
なまえ:えにくす
せいべつ:おとこ
レベル:5
HP:26
MP:11
上記のように、つよさを除いた配列を出力できました。
continueはループ処理のforeach()やfor()while()で使用可能です。
continueの動作
先ほどのサンプルでは、continueを以下のように使いました。
- 変数
$statusの配列の中から、キーつよさが見つかったらcontinueに分岐させるif文を作成 - キー
なまえ〜キーレベルまではif文の条件に該当しないのでelse側が発動し、繰り返し出力 - キー
つよさがif文の条件に該当するためcontinueが発動し、処理をスキップ - その次のキー
HPとMPはif文の条件に該当しないので、else側が発動し、繰り返し出力 - 結果、配列のキー
つよさを除くキーと値が出力される
配列の中に余計な値が含まれている場合はcontinueでスキップする方法も覚えておきましょう。
break文でループ処理を終了させる
breakを使うと、配列のループ処理を途中で終了させることができます。
下記サンプルでは、キーつよさ以降の値を出力させないように、breakで処理を中断させています。
|
1 2 3 4 5 6 7 8 9 |
$status = array('なまえ'=>'えにくす', 'せいべつ'=>'おとこ', 'レベル'=>5, 'つよさ'=>20, 'HP'=>26, 'MP'=>11); foreach ($status as $key => $val) { if ($key == 'つよさ') { break; } else { echo $key.':'.$val.'<br>'; } } |
なまえ:えにくす
せいべつ:おとこ
レベル:5
上記のように、breakを使うことで処理が中断しました。
breakもcontinue同様、ループ処理のforeach()やfor()while()で使用可能です。
breakの動作
先ほどのサンプルでは、breakを以下のように使いました。
- 変数
$statusの配列の中から、キーつよさが見つかったらbreakに分岐させるif文を作成 - キー
なまえ〜キーレベルまではif文の条件に該当しないのでelse側が発動し、繰り返し出力 - キー
つよさがif文の条件に該当するためbreakが発動し、処理を終了 - その次のキー
HPとMPはif文の条件に該当しないが、breakにより処理が中止されたため出力されない - 結果、配列のキー
つよさ以降のキーと値は無視される
breakでネストのループをコントロール
breakでも複数のネストしたループ処理で、単一のループ処理をスキップするだけでなく、外側のループ処理もまとめてスキップさせることもできます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
$members = array('えにくす', 'もよもと', 'こういち'); $status = array('せいべつ'=>'おとこ', 'レベル'=>5,'そうび'=>'ぬののふく'); // 通常の break の場合 foreach ($members as $member) { echo $member.'<br>'; foreach ($status as $key => $val) { if ($key == 'レベル') { break; } else { echo $key.':'.$val.'<br>'; } } } // break 2 の場合 foreach ($members as $member) { echo $member.'<br>'; foreach ($status as $key => $val) { if ($key == 'レベル') { break 2; } else { echo $key.':'.$val.'<br>'; } } } |
break の結果
えにくす
せいべつ:おとこ
もよもと
せいべつ:おとこ
こういち
せいべつ:おとこ
break 2 の結果
えにくす
せいべつ:おとこ
break 2 の方は、えにくすのみが出力されています。
breakでも2つのサンプルでは下記のように処理が違います。
- break は現在のループ処理のみを対象
- break 2 は現在のループと、その外側のループ処理まで対象
ループのネストが3つの場合は break 3 とbreakの後に任意の数字を付けることで、多重ループでも思うようにコントロールできます。

continueのネストのところ間違ってないです?
お返事が遅くなり申し訳ありません。確かに間違っておりましたので該当箇所を一旦削除いたしました。この度は誤った記述があり申し訳ございません。またご指摘いただきありがとうございます。