PHPのwhile文とdo-while文について解説
PHPのwhile文とdo-while文を使えば、一定条件のもとで処理を繰り返すことができます。
この記事では、両ループの基本的な使い方や特徴について、シンプルな例を通して紹介します。
初心者でも取り組みやすい内容となっているので、ぜひ参考にしてください。
while文の基本と構文
基本構文と役割
while文は、条件式がtrueである間ループの処理を実行する文です。
基本構文は以下のとおりです。
<?php
// 変数の初期化
$count = 0;
// 条件がtrueの間ループを実行
while ($count < 5) {
// 処理内容
echo "カウント: " . $count . "\n";
// 変数の更新
$count++;
}
?>
この構文では、最初に条件を評価してtrueの場合にループ内部の処理を行います。
条件がfalseになるとループを終了します。
典型的な使用例
while文は、事前にループ回数が決まっていないケースや、処理の終了条件が複雑な場合に使用されます。
例えば、ユーザーからの入力を処理する際に有効です。
以下は、シンプルな例です。
<?php
// ユーザーからの入力を受け付ける例
$input = "";
while ($input !== "exit") {
// ユーザーに入力を求める
echo "文字を入力してください (終了するには 'exit' を入力): ";
$input = trim(fgets(STDIN));
echo "入力された文字: " . $input . "\n";
}
?>
この例では、ユーザーが「exit」を入力するまでループ内の処理を行います。
無限ループを防ぐ注意点
while文を使用する際は、ループ条件が必ずいつかfalseになるように工夫する必要があります。
無限ループが発生するとプログラムが終了せず、システムに負荷をかける可能性があります。
以下の点に注意してください。
- ループ内で必ず条件に影響を与える変数の更新を行うこと
- 条件式が常にtrueとなることがないようにすること
無限ループを防ぐ対策としては、事前にループの回数を決めるカウンターを設定することが一般的です。
do-while文の基本と構文
基本構文と特徴
do-while文は、条件判定より先に1度必ず処理を実行する特徴があります。
基本構文は以下のとおりです。
<?php
// 変数の初期化
$i = 0;
// 処理を実行した後に条件を評価
do {
// 処理内容
echo "ループ回数: " . $i . "\n";
// 変数の更新
$i++;
} while ($i < 5);
?>
この構文では、最初の1回は必ず実行され、後に条件をチェックして継続するか判断します。
実行順序の特性
do-while文の実行順序は、条件を評価する前に必ずブロック内の処理が行われる点が特徴です。
そのため、最初のループでは必ず1度処理が実行されるという点に注意してください。
条件がfalseであっても1度は必ず出力が発生することが保証されます。
使用例と注意点
do-while文は、少なくとも1回は処理を実行する必要がある場合に適しています。
たとえば、ユーザーに初回入力を促すときに利用できます。
しかし、条件が初回にfalseとなるシナリオでは、不要な処理が実行される可能性があるため、使用する際は条件をよく確認する必要があります。
<?php
// ユーザー入力を利用する例
$userInput = "";
do {
// 初回必ず入力を求める処理
echo "コマンドを入力してください (終了するには 'exit'): ";
$userInput = trim(fgets(STDIN));
echo "あなたが入力した内容: " . $userInput . "\n";
} while ($userInput !== "exit");
?>
この例では、初回の入力は必ず求められ、その後に「exit」が入力されない限り処理を続けます。
while文とdo-while文の比較
実行タイミングの違い
while文は最初に条件を評価してから処理を実行するため、条件がfalseの場合は一度も処理が実行されません。
一方、do-while文は少なくとも1回は処理が実行され、その後に条件をチェックします。
以下の点が実行タイミングの違いとして挙げられます。
- while文 : 条件がtrueの場合のみ処理を実行
- do-while文 : 初回は無条件に処理を実行
適用シーンの選定基準
適用シーンの選定においては、以下の基準が参考になります。
- 初回の処理を必ず実行したい場合 → do-while文を使用
- 条件が成立しない場合に処理をスキップしたい場合 → while文を使用
また、ループの終了条件がユーザー入力や外部データに依存する場合は、入力検証のタイミングに注意して文を選択するとよいでしょう。
実践的なコード例
while文を使った処理例
以下は、while文を使って1から10までの数を出力する処理例です。
<?php
// 数値カウンターの初期化
$number = 1;
// 10以下の間ループを実行
while ($number <= 10) {
// 数値を出力する処理
echo "Number: " . $number . "\n";
// カウンターをインクリメント
$number++;
}
?>
Number: 1
Number: 2
Number: 3
Number: 4
Number: 5
Number: 6
Number: 7
Number: 8
Number: 9
Number: 10
コード例のポイント
- 変数の初期化と更新が正しく行われていること
- 条件が明確に定義され、ループ終了が保証される点
- シンプルな出力例でwhile文の動作を確認できる点
do-while文を使った処理例
次は、do-while文を使ってユーザーから入力を受け付け、’quit’が入力されるまで処理を繰り返す例です。
<?php
// ユーザー入力の初期化
$command = "";
do {
// ユーザーに入力を求める
echo "コマンドを入力してください ('quit'で終了): ";
// 入力を取得し、改行を削除
$command = trim(fgets(STDIN));
// 入力を表示する処理
echo "受け付けたコマンド: " . $command . "\n";
} while ($command !== "quit");
?>
コマンドを入力してください ('quit'で終了): hello
受け付けたコマンド: hello
コマンドを入力してください ('quit'で終了): test
受け付けたコマンド: test
コマンドを入力してください ('quit'で終了): quit
受け付けたコマンド: quit
コード例のポイント
- 最初の入力促しが必ず実行される点
- ループ内での処理(入力の受付と表示)がシンプルに記述されている点
- 終了条件が明確で、’quit’入力時にループが終了する点
まとめ
この記事では、PHPにおけるwhile文とdo-while文の基本構文、特徴、使用例および注意点について詳しく解説しました。
基本的な違いや実践的なコード例を通じて、ループ処理の設計と実装方法が理解できました。
ぜひ、実際にコードを試して、ループ処理の活用に挑戦してみてください。