【PHP入門】continue・break、無限ループ…while文をやさしく解説

muramatsu
書いた人 muramatsu
侍エンジニア塾ブログは、未経験からWebアプリ開発と仕事獲得をサポートする
侍エンジニア塾のオウンドメディアです。
プログラミング学習を覗き見

こんにちは!最近色々なことを考えていて、頭の中が無限ループになりそうなmuramatsuです。

PHPでは指定した条件で繰り返し処理が実行できるループ処理がいくつかあります。

この記事ではいくつかあるループ処理の1つ、while文について

  • while文とは(for文との違い)
  • while文の使い方
  • ループ処理をスキップするcontinue
  • ループの途中で処理を終了するbreak
  • while文の仲間do~while文とその使い方

という基本的な内容から、

  • while文で配列の値を取得する方法
  • while文で無限ループの使用方法・注意点

などの応用的な使い方に関しても解説していきます。

今回はwhile文の使い方をプログラミング初心者の方にもわかりやすく図も入れて解説します!

while文とは

while文は処理を繰り返し行うときに使用するループ文で、PHPのループ処理の中でも最も簡単なタイプとなります。

while文の基本構文は、以下のように記述します。

while文は「条件式」の評価がTRUEの場合、継続してループ処理を実行し、FALSEになったらループ処理を終了します。

while文の条件式が初めからFALSEの場合は、while内部の処理は一度も実行されません。

流れは以下のようになります。
while1

while文は下記のように書くことも可能です。

この場合の流れは以下の図のようになります。
while2

繰り返し処理はwhile文の他にもfor文があり、この2つのループ処理は使い分ける必要があります。

上記のwhile文の動きをみると、for文との違いはほとんど無いように見えますが、

for文は、繰り返し処理を優先して行いたい場合

while文は、条件式を元に繰り返し処理を行いたい場合

にそれぞれ使用します。

for文の使い方については、以下の記事で詳しく解説しています!

while文の使い方

ここでは実際にwhile文の基本的な使い方を見ていきましょう。

基本的な使い方

以下の例ではwhileの条件式で「変数$iが10または10より大きな値になるまで」ループ処理を継続して実行します。

実行結果:

while文内で、ループ処理が実行されるたびに$iの値がインクリメント($i++)して値が1ずつ増加していきます。

$iが0の値から1ずつプラスされ、10になるまでループして$iの値が出力されるので、実行結果では0から10まで出力されました。

ループ処理をスキップするcontinue

while文などの繰り返し処理で、ループの途中で処理をスキップする(飛ばす)にはcontinueを使用します。

continueはある条件の時に処理をスキップしてくれるので、ある条件を決めなければいけません。

ある条件はif文を使って「~の時処理する」と条件式を指定します。

以下にwhile文の処理で、if文の結果がTRUEの場合はcontinueでwhileのループ処理をスキップする方法です。

実行結果:

if文の条件式で、$iの値が7以外のときはif文の実行結果がFALSEになるのでif文は通り過ぎ、while文内にある次の処理に流れていきます。

$iの値が7のときは、if文の条件式が実行され結果がTRUEになるので、if文内にある処理「$iの値にインクリメント($i++)で1足しcontinue(スキップ)」が実行されます。

$iが8になりcontinueでwhile文内の処理(if文の下にかかれている処理)に行き、echoで出力され、インクリメントでさらに1が足されます。

while文のはじめに戻り、ループ処理が行われ$iの値が10になるとwhileの条件式の結果がFALSEとなり終了となります。

以下が流れの図になります。

while文-continue_sampleCode

上記では$iが7になるとスキップさせる処理をしていますが、if文の処理のところに「echo $i. ‘–> skip’;」を追加するとどうなるか、見てみましょう。

実行結果:

$iの値が7の時にechoで$iの値と「‘–> skip’」を出力する、となっているので、実行結果のようになりました。

continueを使ったときの動きの流れは以下の図のようになります。
while文-continue

continueの処理については、以下の記事でも詳しく解説していますので参考にしてみてくださいね。

ループの処理を終了するbreak

while文などの繰り返し処理で、ループの途中で処理を終了する場合はbreakを使用します。

breakもcontinueと同じくif文を使って条件式を指定していきます。

以下にwhile文の処理で、if文の結果がTRUEの場合はbreakでwhileのループ処理を終了する方法を記述します。

実行結果:

$iの値が5以外のときはif文の実行結果がFALSEになるので通り過ぎ、while文内にある次の処理に流れていきます。

$iの値が5のとき、if文の実行結果がTRUEになるので、if文内にある処理「$iの値にインクリメントで1足しbreak(終了)」が実行されます。

以下が流れの図になります。

while文-break_sampleCode

もしif文の処理のところに「echo $i. ‘–> break’;」を追加するとどうなるしょうか。

実行結果:

continueのときと同じように、$iの値が5の時にechoで$iの値と「‘–> break’」を出力する、となっているので、実行結果のようになりました。

breakを使ったときの動きの流れは以下の図のようになります。
while文-break

breakの処理については、以下の記事でも詳しく解説していますので、こちらも参考にしてみてください。

while文の仲間do~while文

while文にはdo~while文もあります。

do-while文とは、繰り返し処理を実行するかの条件式を、ループの最初ではなく最後に実行します。

つまり、始めにdoで処理を1度行い、whileでループの条件式に行き、条件式が満たされるまで処理を繰り返し実行してくれます。

以下のようにwhileによる条件式が最後に実施されるため、最低1回は繰り返し処理の実行が保証されています。

基本構文:

または以下のように書くことも可能です。

構文2:

それぞれの流れは以下の図のようになります。
while3

while文は、指定した条件式がTRUEのとき、ループ処理を優先したい場合によく使われます。

do~while文では、必ず1回は処理を行いたいときに使うと便利です。

つまり、while文は条件式がFALSEだと指定した処理が行われない

のに対し、

do~while文では最低1回は指定した処理が行われ、その後条件式がTRUEかFALSEかでループ処理が行われるか、終了します。

do~while文の使い方

do-while文の簡単なサンプルを紹介します。

まずは、do~while文を使って0の値だけを表示させてみましょう。

実行結果:

doでまず処理を実行するので、echoで$iの値が出力されます。

$iは0から数えられていきますが、whileの条件式が「$iが0以下の場合」となっているので、条件式の結果はFALSEとなり繰り返し処理は1回で終了します。

次に$iに増減式を設定して処理をループさせてみましょう。

0~9の数字を出力します。

実行結果:

はじめにdoで$iの値を出力させる処理を行います。

$iの値にインクリメント($i++)で1を足します。

whileで条件式「$iの値が10以下の場合」となっているので、条件式の結果がTRUEになり、doに戻ります。

$iの値が1になっている状態でdoの処理が行われ、インクリメントで更に1が足されてwhileの条件式に行く…という繰り返しが条件式の結果がFALSEになるまで行われます。

while文で配列の値を取得する方法

次にwhile文の応用実践編として、配列の値を取得してみましょう。

配列の値をループで1つずつ取得するには、通常配列専用のループ処理foreach文が用意されています。

しかしforeach文を使わず、while文でも配列の値を1つずつ取得することができます。

while文で配列の値を取得する方法は、count関数も一緒に使用します。

count関数は配列の要素数を数えて(カウントして)くれる関数です。

以下にwhile文で配列の値を1つずつ取得するサンプルを見てみましょう。

実行結果:

countで配列$arrayの要素数を取得した値を$numberに代入します。

while文で条件式を「$iの値が$number(配列の要素数)以下の場合」とします。

配列$arrayの要素番号($i)を四角カッコ([ ])で指定して、echoで指定されたキーの要素を出力させます。

$iの値をインクリメント($i++)で1ずつ値を足して、whileに戻り$iが$numberの値(要素数)になるまで繰り返し処理が行われます。

while文で無限ループの使用方法

while文で無限ループを実行するためには、whileの条件式で1(while(1))またはTRUEを指定すると、評価が常にTRUEとなるため、無限ループを実行することができます。

以下にwhile文で無限ループを使用する方法を記述します。

無限ループは、ユーザーが何らかのアクションを行うまで処理を待機していたり、特定の値が入力されるまでループ処理を継続する場合に使用します。

しかし、無限ループを常に実行していると、コンピューターのCPUやメモリなどのリソースを消費してしまうため、注意が必要です。

そのため無限ループを使用する場合は、実行を一時的に停止または遅らせてくれるsleep関数を使用します。

ループを一時的に休止状態にしてCPUの負荷を減らすなどの対策を行うのが一般的です。

sleep文については、以下の処理で詳しく解説しています!

sleep関数が気になった方ぜひ参考にしてみてください。

ループ処理についてもっと詳しく知りたい方へ

while文の他にもループ処理ができる関数はfor文foreach文があり、色々な使い方があります。

PHPで使用するループ処理のさまざまな使い方については、以下の記事にまとめています。

こちらも参考にしてみてください!

まとめ

ここではループ文の1つであるwhile文について、

  • while文とは
  • while文の仲間do~while文
  • while文・do-whileの基本的な使い方
  • 実践的な使い方
  • ループ処理をスキップするcontinueの使い方
  • ループ処理を終了させるbreakの使い方
  • 無限ループの使い方

などの基本から応用的な使い方について解説しました。

while文は処理を繰り返し実行するときによく使いますので、for文、foreach文と合わせて処理を理解しておきましょう。

もしwhile文の使い方を忘れてしまったら、この記事を思い出してくださいね!


33歳、未経験だった僕がフリーエンジニアになれた理由
現在フリーランスをされている市川友哉さん。33歳で、プログラミングを学び始め、4ヶ月という短い期間でフリーランスエンジニアとして独立までされた学習ログを余すことなくインタビューさせていただきました。

プログラミングを学習中の方はもちろん、独立をお考えの方まで幅広く活用できる記事になっています。この機会に是非活用していただければと思います。


現役フリーランスエンジニアによる無料体験レッスン実施中!

もし、あなたが、

  • 経験、年齢、学歴に不安がある
  • 挫折しない学習方法が知りたい
  • アプリ開発で困っている
  • エンジニアの”生”の声が聞きたい!
  • 仕事獲得の仕方がわからない
  • エンジニアに転職したいが何をすればいいかわからない

など、プログラミング学習やキャリアのことでお困りであれば、まずは『無料体験レッスン』にお申し込み下さい。

あなたにとって、最適の解決策をご提案させていただきます。

詳しくは下の画像から詳しいサービス内容をご確認ください。

cta_mtm3

非常識な結果を出した卒業生

活躍する現役エンジニア

人気記事セレクション

LINEで送る
Pocket

この記事が気に入ったら
いいね!をしてフォローしよう

最新情報をお届けします

書いた人

muramatsu

muramatsu

世界中の人たちと友達になって、その友達の家を巡る旅をしたいと密かに思っている。

複雑な内容を誰にでもわかりやすく、そして納得のいくような解説をする、をモットーにしています!