PHPのwhile文でループ処理(HTML埋め込みでスッキリな書き方も)

  • このエントリーをはてなブックマークに追加
  • Pocket

スポンサードリンク

PHPのwhile文はもっとも簡単なループ処理です。

でも一歩間違うと無限ループにハマります。

while文の基本的な使い方、for文との使い分け、HTML埋め込みでもスッキリ書く方法をご紹介しますので、ループ処理が苦手な初心者の方にも理解いただけるかと思います。

 

while文の基本

whileの使い方

1234

変数に格納された1という数値を出力し、さらに2を出力し…という風に、条件式の5に満たない4まで出力を繰り返しました。

ちなみに、while文のカッコ内の条件式にある<(小なり)の記号は、「左辺より右辺が大きい」という意味ですね。

5の方が大きい数値、つまり4以下の数値まで繰り返すという条件式になります。

参考:比較演算子一覧

whileの構文

while (条件式) {
条件式に当てはまった場合の処理;
増減式( ++ や — など);
}

whileの動作

先ほどのサンプルは以下のように動作しました。

  1. 変数$iに数字の1を格納する
    $i = 1;
  2. while文で5に満たない数値(4)まで繰り返す条件式を書く
    while ($i < 5) {
  3. もし4以下の数値だったら、変数$iの中身を表示させる
    echo $i;
  4. 変数$i1プラス(インクリメント)し、変数$iの中身が2になる
    $i++;
  5. while文の最初に戻り、変数$iの値は2で、5に満たない数値という条件式に当てはまるため、さらに繰り返す
    while ($i < 5) {
  6. 数字の2を表示させる
    echo $i;
  7. 変数$iに、さらに1プラス(インクリメント)し、変数$iの中身が3になる
    $i++;

………(条件式に該当する間は、さらにループ)……

 

以上のように処理がループされ、5になったところでループから抜け、終了となります。

1
2
3
4

上記のように数値が1つずつ加算されながら、4まで繰り返し表示されましたね。

インクリメントとは

変数の値を 1 増やす演算子。
変数の横に「++」とプラスを2つ書くと、その変数の値を1つ増やしてくれる。
逆に「–」とマイナスを2つ書くのはデクリメントと呼ばれ、値を1つ減らす。

while文の無限ループに注意

先ほどのサンプルにあった、インクリメントなどの増減式で数値を増減させないと、無限ループとなり、延々と処理がループしてしまいます。

11111111111111111111111111111111111111111111111111111111111111 … 1 が無限に出力される

上記サンプルだと、数字の5まではループ処理をするという条件なので、ループごとに数値を増減していかないと、延々と同じ数値が出力され、条件にたどり着かず、無限ループになります。

 

  1. まず変数$iに数字の1を格納
    $i = 1;
  2. while文の条件により、4まではループ処理
    while ($i < 5) {
  3. 変数$iの中身である1を表示し、while文の最初に戻る
    echo $i;
  4. 変数$iの中身は1のままなので、またecho $i;で数字の1が表示

……(繰り返し)……

 

処理に負荷がかかるため、ブラウザが固まったり、サーバーのリクエストが増えたりと処理がパンクします。

他にも、変数名を間違えたり、数値の上限を設定せずにインクリメントだけした場合でも無限ループになります。

while文を使う際は無限ループに気を付けましょう。

for文とwhile文の使い分け

for文とwhile文の使い分けはよく言われますが、一般的には以下のように使い分けることが多いようです。

for文は「回数」によるループ処理

回数や数値が決まっている処理はfor文を使います。

 

  1. 10人の選手に、背番号1~10の連番を振る
  2. 年齢が0歳~80歳のプルダウンメニューを作成

while文は「条件」によるループ処理

回数や数値は決まっていないが、条件に該当したものを処理する際は、while文を使います。

 

  1. 背番号7番の選手を抽出する
  2. 年齢が27歳の人を抽出する

for文とwhile文の比較

先ほどのfor文とwhile文の使い分けの例を比較してみましょう。

 

  1. 10人に背番号の連番を振るならfor文
  2. 何人いるか分からないが、背番号7番の選手を抽出するならwhile文

 

  1. 0歳~80歳の1歳刻みのプルダウンならfor文
  2. 何人いるかは分からないが、27歳の人だけを抽出するならwhile文

それぞれ、for文なら連番で、while文ならある条件の抽出になっています。

 

ただ、似た者同士なので、独自のルールや個人の好みでも良いのではとも思います。

わたくしもあまり気にしたことありませんでした。(たまたま参考にしたサンプルがwhile文だったので等…)

コードが冗長にならない方で選ぶ、可読性が優れているコードの方で選ぶ…といった感じで良いかなと思います。

ただ、それぞれの特長や注意点を理解して使いこなしたいですね。

参考:PHPのfor文で繰り返し処理(HTML埋め込みでもスッキリな書き方も)

「endwhile」でHTMLに埋め込んでもスッキリ記述

while文にも、if文などの他の制御構造と同じように、endwhileを使った別の構文があります。

HTMLに埋め込んで記述する機会も多いPHPですが、この書き方だとスッキリ可読性も良くなりますよ。

・1
・2
・3
・4
・5
・6
・7

(サンプルが連番ですがwhile文でやりました…汗)

 

while文の最初の{(波カッコ)を使う代わりに:(コロン)を使い、最後の}(波カッコ)の代わりにendwhile;を使います。

HTMLに埋め込んで記述すると{(波カッコ)忘れたりと思わぬエラーが出たり、可読性もよくありません。

上記のような構文だと、HTML埋め込みでのコードでも可読性スッキリですね。

わたくしはこの構文をいつもオススメしています。

この辺の書き方は好みもあるかとは思いますが、実際こういうコーディングも見かけることは多いので、こういう構文を使わない人も覚えておくと良いでしょう。

do-while文

do-whileのループは、while文を反対にひっくり返したような構文です。

1

最初に変数の中身が表示され、その後に条件式で判定されます。

上記のケースは変数$ifalse判定でループ終了となりますが、while文と違ってfalseでも1回は処理されましたね。

while文だと1回も表示されないままです。

do-while文は、条件式がtruefalseに関わらず1度は必ず処理を実行してくれるため、そういう使い方をする際はこちらを使いましょう。

スポンサードリンク

  • このエントリーをはてなブックマークに追加
  • Pocket

コメントを残す

*