読み込み中...

初心者も安心!PHPのwhileループを10ステップで理解する

PHP_whileループ理解ステップ PHP
この記事は約13分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を満たす現役のプログラマチームによって監修されています。

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

PHPのwhileループをマスターすることで、プログラミングの世界がグッと広がります。

繰り返しの処理を行うためのループとは何か、具体的な使い方はどういったものか、そしてその応用例や注意点、さらにカスタマイズ方法まで、この記事を通じてPHPのwhileループを10ステップで理解していきましょう。

●PHPとは

PHPは、Webサーバー上で動作するプログラミング言語の一つです。

データベースとの連携や、HTMLの動的な生成など、Webアプリケーションを制作する際に広く利用されています。

●whileループとは

○基本的な構造

whileループは、「特定の条件が満たされている間、繰り返し処理を行う」という制御構造の一つです。

具体的には次のような形をしています。

while (条件式) {
  // 繰り返し行う処理
}

このコードでは、まず「条件式」を評価します。

その結果が真(true)である限り、「繰り返し行う処理」が実行されます。

繰り返し行う処理が終わると、再び条件式が評価され、真であれば同じ処理が実行されます。

これを条件式が偽(false)になるまで繰り返します。

○whileループの流れ

whileループは、一見難しそうに見えますが、その動きは非常にシンプルです。

まず、ループが始まるときに条件式が評価され、その結果が真であれば指定された処理が実行されます。

処理が終わると、再び条件式が評価され、真であれば同じ処理が再度実行されます。

このサイクルが、条件式が偽になるまでずっと続きます。

逆に言えば、条件式が初めて評価されたときに偽であった場合、指定された処理は一度も実行されません。

これらの理解を深めるために、具体的なサンプルコードとその説明を次に示します。

●PHPでのwhileループの使い方

○サンプルコード1:基本形

下記のコードは、whileループを用いて1から10までの数字を順に表示するシンプルな例です。

<?php
$i = 1;

while ($i <= 10) {
    echo $i;
    $i++;
}
?>

このコードでは、初めに変数$iを1で初期化しています。

その後、whileループが始まります。

ループの条件式として$i <= 10を設定しており、この条件が真である限り(つまり、$iの値が10以下である限り)ループ内の処理が実行されます。

ループ内の処理では、まずecho文で変数$iの値を出力します。

次に、$iの値を1増やす処理を行っています。

この処理により、次のループの際の条件式の評価結果が変わり、$iが10を超えるとループから抜け出します。

このコードを実行すると、1から10までの数字が順に表示される結果になります。

具体的には、出力結果は「12345678910」のようになります。

○サンプルコード2:カウンター機能

whileループは、カウンターとしても利用することができます。

下記のコードは、1から10までの合計を求めるためのものです。

<?php
$i = 1;
$sum = 0;

while ($i <= 10) {
    $sum += $i;
    $i++;
}

echo $sum;
?>

このコードでは、初めに変数$iを1で初期化し、変数$sumを0で初期化しています。

その後、whileループを開始します。

ループの条件式は$i <= 10となっており、これが真である限りループの処理が続きます。

ループ内では、まず$sumに$iの値を加える処理を行います。

次に、$iの値を1増やす処理を行っています。

これにより、次回のループで条件式の評価が変わり、$iが10を超えるとループから抜け出します。

ループが終了した後は、$sumの値を出力します。

すなわち、このコードは1から10までの合計を求め、その結果を表示します。

このコードを実行すると、出力結果は「55」になります。

これは、1から10までの合計が55であるためです。

ここまでで、基本的なwhileループの使い方を見てきました。

次に、応用例として配列の要素を取り出す方法や、二次元配列の操作方法、データベースからのデータ取得方法を見ていきましょう。

●whileループの応用例

○サンプルコード3:配列の要素を順番に取り出す

whileループは、配列の要素を順番に取り出すためにも使うことができます。

下記のコードは、配列の全ての要素を順に表示する例です。

<?php
$fruits = ["apple", "banana", "cherry"];
$i = 0;

while ($i < count($fruits)) {
    echo $fruits[$i];
    $i++;
}
?>

このコードでは、初めに配列$fruitsを定義し、その要素として”apple”, “banana”, “cherry”を設定しています。

次に、変数$iを0で初期化します。

その後、whileループを開始します。

このループの条件式は$i < count($fruits)となっており、これが真である限りループが続きます。

count関数は配列の要素数を返すため、この条件式は「$iが配列$fruitsの要素数より小さい間、ループを

続ける」という意味になります。

ループ内では、配列$fruitsの$i番目の要素をecho文で出力し、その後で$iの値を1増やす処理を行っています。

このコードを実行すると、”apple”, “banana”, “cherry”が順に出力されます。

つまり、配列の要素を先頭から順に取り出して表示することができます。

同様に、二次元配列の操作やデータベースからのデータ取得も、whileループを用いて実現できます。

○サンプルコード4:二次元配列の操作

PHPでは、1つの配列の中にさらに配列を含めることができます。

これを二次元配列と呼びます。

下記のコードは、二次元配列の全ての要素を順に表示する例です。

<?php
$fruits = [
    ["name" => "apple", "color" => "red"],
    ["name" => "banana", "color" => "yellow"],
    ["name" => "cherry", "color" => "red"]
];
$i = 0;

while ($i < count($fruits)) {
    echo "Name: " . $fruits[$i]["name"] . ", Color: " . $fruits[$i]["color"];
    $i++;
}
?>

このコードでは、まず二次元配列$fruitsを定義し、それぞれの果物に”name”と”color”の2つの情報を持たせています。

その後、カウンター変数$iを0で初期化し、whileループを開始します。

ループの条件式は $i < count($fruits) となっており、これが真である限りループが続きます。

ループ内では、配列$fruitsの$i番目の要素(配列)の”name”キーの値と”color”キーの値を出力します。

そして、$iの値を1増やします。

この処理を配列の要素数だけ繰り返すことで、二次元配列の全ての要素を順に取り出して表示します。

このコードを実行すると、「Name: apple, Color: red」「Name: banana, Color: yellow」「Name: cherry, Color: red」という3行の結果が出力されます。

つまり、二次元配列の全ての要素を順に取り出し、その情報を表示することができます。

○サンプルコード5:データベースからのデータ取得

PHPとMySQLを連携させると、データベースからのデータ取得もwhileループで簡単に実現できます。

下記のコードは、MySQLのテーブルからデータを取得し、それを順に表示する例です。

<?php
// ここではデータベースへの接続設定を省略

$sql = "SELECT * FROM fruits";
$result = $conn->query($sql);

while ($row = $result->fetch_assoc()) {
    echo "Name: " . $row["name"] . ", Color: " . $row["color"];
}
?>

このコードでは、初めにSQL文を定義し、それを$query関数で実行して結果を取得します。

そしてwhileループを使って結果セットから1行ずつデータを取得し、その”name”キーの値と”color”キーの値を表示します。

このコードを実行すると、データベースの”fruits”テーブルにある全ての行の”name”と”color”が順に出力されます。

つまり、データベースからデータを取得し、その情報を表示することができます。

以上のように、whileループは配列やデータベースの操作に大変便利です。

しかし、whileループを使用する際には注意が必要です。

特に、無限ループや条件式の設定については、適切に理解しておくことが重要です。

●whileループを使用する際の注意点

whileループはその特性上、繰り返し処理を行う際に便利なツールでありますが、その使用には注意が必要です。

○無限ループに注意

PHPのwhileループは、条件が真である限り繰り返し処理が行われます。

しかし、条件が常に真である場合、ループは無限に続きます。

これを無限ループと呼び、プログラムが停止しなくなるため、非常に重大な問題を引き起こす可能性があります。

たとえば、次のコードは$iが0で初期化され、ループの条件が$i < 10であるため、理論的には10回ループが行われます。

<?php
$i = 0;
while ($i < 10) {
    echo $i;
}
?>

しかし、このコードには$iの値を増やす処理がないため、$iの値が常に0であり、ループの条件が常に真となります。

結果、無限ループが発生し、プログラムは停止しません。

そのため、ループ内で必ずループの条件が偽になるような処理を記述することが重要です。

○条件式の設定に注意

whileループを使用する際、もう一つ注意すべき点は、条件式の設定です。

ループの条件式が初めから偽である場合、ループの中身は一度も実行されません。

下記のコードは、$iが10で初期化され、ループの条件が$i < 10であるため、初めからループの条件が偽となります。

<?php
$i = 10;
while ($i < 10) {
    echo $i;
    $i++;
}
?>

このコードを実行しても何も出力されません。

そのため、条件式を設定する際には、期待する動作となるように注意深く設定することが必要です。

以上の2つの注意点を理解し、whileループを適切に使用することで、効率的なプログラムを書くことができます。

●whileループの問題解決法

先ほど、whileループを使用する際の注意点として、無限ループの発生や条件式の設定について述べました。

ここではそれらの問題を解決する具体的な方法を2つ紹介します。

○無限ループを防ぐ

無限ループを防ぐためには、ループの条件が一定のタイミングで偽になるような処理をループ内に記述することが必要です。

これを確実に行うためには、カウンタ変数を用いてその値をループ内で更新するのが一般的な方法です。

この例では、$iを初期値0として、whileループ内でインクリメント(値を1増やす)処理を行い、その結果を出力しています。

ループの条件式により、$iの値が10になるとループが終了します。

<?php
$i = 0; // カウンタ変数の初期化
while ($i < 10) {
    echo $i;
    $i++; // カウンタ変数の更新
}
?>

このコードを実行すると、0から9までの数字が出力されます。

$iの値が10になると、ループの条件式$i < 10が偽となり、whileループは終了します。

このように、ループ内でカウンタ変数の値を適切に更新することで、無限ループを避けることができます。

○条件式の見直し

次に、条件式の設定について考えます。初めから偽となる条件式を設定すると、ループの中身は一度も実行されません。

そのため、条件式は期待する動作となるように慎重に設定する必要があります。

下記のコードは、$iの初期値を10とし、ループの条件式を$i > 0としています。

これにより、ループの開始時点で条件式が真となり、ループが実行されます。

<?php
$i = 10; // カウンタ変数の初期化
while ($i > 0) {
    echo $i;
    $i--; // カウンタ変数の更新
}
?>

このコードを実行すると、10から1までの数字が出力されます。

$iの値が0になると、ループの条件式$i > 0が偽となり、whileループは終了します。

このように、条件式を適切に設定し、カウンタ変数の更新を行うこと

で、期待する動作を実現することができます。

以上、無限ループの防止と条件式の見直しについて解説しました。

これらの知識を活かして、効率的で正確なプログラムを作成してください。

●whileループのカスタマイズ方法

whileループはその基本的な形状だけでなく、さまざまなカスタマイズを施すことができます。

ここでは、do-whileループとforループへの変換について解説します。

○do-whileループ

do-whileループは、whileループの一種で、少なくとも一度はループの中身を実行し、その後に条件をチェックするループです。

これは、whileループとは逆で、ループの中身が必ず最初に実行されることを保証します。

この例では、$iを初期値0とし、do-whileループを使用してループ内で$iを1増やし、その結果を出力しています。

$iの値が10になるとループが終了します。

<?php
$i = 0;
do {
    echo $i;
    $i++;
} while ($i < 10);
?>

このコードを実行すると、0から9までの数字が出力されます。

$iの値が10になると、ループの条件式$i < 10が偽となり、do-whileループは終了します。

このように、do-whileループを使用すると、最初のループの実行を保証することができます。

○forループへの変換

whileループは、forループに変換することも可能です。

この変換は、初期化、条件チェック、変数の更新が1行で表現できる場合に特に便利です。

下記の例では、forループを使用して0から9までの数字を出力するコードを表しています。

<?php
for ($i = 0; $i < 10; $i++) {
    echo $i;
}
?>

このコードを実行すると、0から9までの数字が出力されます。

forループは、初期化($i = 0)、条件チェック($i < 10)、変数の更新($i++)を1行で表現することができるため、コードが読みやすくなります。

また、コードの行数が少なくなるため、エラーの可能性を減らすことができます。

以上、whileループのカスタマイズ方法として、do-whileループとforループへの変換について紹介しました。

これらの知識を活かして、より効率的で読みやすいコードを書くことができます。

まとめ

この記事では、「初心者も安心!PHPのwhileループを10ステップで理解する」というテーマで、PHPのwhileループについて解説しました。

まずは、whileループの基本的な使い方を理解し、繰り返しの処理を効率的に記述する方法を学びました。

次に、whileループが原因で発生する可能性のある無限ループの問題とその解決法について詳しく説明しました。

さらに、whileループのカスタマイズ方法として、do-whileループとforループへの変換方法を紹介しました。

これらの知識を利用することで、あなたのコードはより効率的で、読みやすいものになります。