Search

検索したいワードを入力してください

2019年01月18日

PHPのwhileの使い方/do-while/forとの違い

whileはループ処理を実装するうえで代表的な制御構造です。この記事では、初心者向けにPHPにおけるwhileの使い方を解説しています。do-whileやforとの違いについても触れています。whileの使い方でお悩みの方、ぜひ読んでみてください。

while文とは?

while文とは、条件式がTrueである間ブロック内の処理を繰り返し実行する、ループ処理時に使用する制御構造のひとつです。ループ処理の書き方にはいくつか種類がありますが、while文はwhileの英語の意味のとおり、「~する間」処理を繰り返すと覚えると良いでしょう。

while文はあらゆるプログラミング言語で採用されている制御構造ですが、PHPでもこのwhile文が採用されています。この記事では、PHPにおけるwhileの使い方を詳しく紹介していきます。

PHPのwhile文の書き方

while文は、ループ条件と繰り返し実行する処理で成り立ちます。while文について、PHPでは2つの書き方があります。

1つ目は、ループ条件を波括弧で囲う方法です。こちらの書き方は、PHPに限らずあらゆるプログラミング言語で採用されている一般的な書き方です。

while (ループ条件) {
処理;
}


もう1つは、endwhileを使用する方法です。こちらの書き方は、HTMLの間にPHPのプログラムを埋め込む際に使用すると可読性が上がります。
while (ループ条件) :
処理;
endwhile;

// ※HTMLに埋め込む
<ul>
<?php while (ループ条件) : ?>
<li>処理</li>
<?php endwhile; ?>
</ul>


どちらの書き方でも実行結果は同じです。whileの使用シーンに応じて、臨機応変に使い分けましょう。

PHPのwhileとdo-whileの違い

whileと似た制御構造に、do-whileというものがあります。whileとdo-whileの違いは、whileは1回もループが実行されないことがありますが、do-whileは最低1回は必ず実行される点です。

whileはループ条件が先頭にあり、ループ開始前にループ条件の判定を行います。したがって、ループ開始前の時点でループ条件がFalseであれば、1度もブロック内の処理は実行されません。

しかし、do-whileはループ条件がwhile文の末尾にあり、ループ開始後にループ条件の判定を行います。したがって、ループ開始前の時点でループ条件がFalseであっても、必ず1度はブロック内の処理が実行されます。

do-whileの書き方は下記のとおりです。

do {
処理;
} while (ループ条件);

whileを実際に使ってみる

それでは、whileを実際に使ってみましょう。

while文はループ条件がTrueになるまで繰り返す特性があるため、ループ開始時点ではループ回数が分からない場合に有効です。例えば良くあるのは、質問の回答が正確に得られるまでループを繰り返すなどが挙げられます。

<?php
$need_loop = True;
while ($need_loop) {
print("ループを終了しますか?(yes/no)\n");
$answer = trim(fgets(STDIN));
if ($answer == "y" or $answer == "yes") {
$need_loop = False;
}else if ($answer != "n" and $answer != "no") {
print("yesかnoで答えてください。\n");
}
}

?>

breakでループを終了する

breakはループを終了するときに使います。breakを使って先のwhile使用例をより見やすくしてみましょう。

<?php
while (True) {
print("ループを終了しますか?(yes/no)\n");
$answer = trim(fgets(STDIN));
if ($answer == "y" or $answer == "yes") {
break;
}
if ($answer != "n" and $answer != "no") {
print("yesかnoで答えてください。\n");
}
}

?>

複数ループを1度に終了するには

PHPでは、breakの後ろに数字を指定し、複数ループを一度に終了することができます。

<?php
while (True) {
print("ループを終了しますか?(yes/no)\n");
$answer = trim(fgets(STDIN));
if ($answer == "y" or $answer == "yes") {
while (True) {
print("本当に終了しますか?(yes/no)\n");
$answer = trim(fgets(STDIN));
if ($answer == "y" or $answer == "yes") {
break 2;
}
if ($answer == "n" or $answer == "no") {
break;
}
print("yesかnoで答えてください。\n");
}
}
if ($answer != "n" and $answer != "no") {
print("yesかnoで答えてください。\n");
}
}

?>

continueでループ中の一部の処理をスキップする

continueは、現在のループの残りの処理をスキップし、次のループを開始するときに使用します。次のループを開始する際、ループ条件を評価し、Falseであればループは終了します。先のwhile使用例を、continueを使って見やすくしてみましょう。

<?php
while (True) {
print("ループを終了しますか?(yes/no)\n");
$answer = trim(fgets(STDIN));
if ($answer == "y" or $answer == "yes") {
break;
}
if ($answer == "n" or $answer == "no") {
continue;
}
print("yesかnoで答えてください。\n");
}

?>

複数ループを1度にスキップするには

PHPでは、breakと同様、continueの後ろに数字を指定し、複数ループを1度にスキップできます。

<?php
while (True) {
print("ループを終了しますか?(yes/no)\n");
$answer = trim(fgets(STDIN));
if ($answer == "y" or $answer == "yes") {
break;
}
if ($answer == "n" or $answer == "no") {
while (True) {
print("ループを続けてよろしいですか?(yes/no)\n");
$answer = trim(fgets(STDIN));
if ($answer == "n" or $answer == "no") {
continue 2;
}
if ($answer != "y" and $answer != "yes") {
print("yesかnoで答えてください。\n");
}
}
}
if ($answer != "n" and $answer != "no") {
print("yesかnoで答えてください。\n");
}
}
?>

whileループとforループの違い

PHPでは、whileと同じループ処理を行う制御構造として、forという制御構造が存在します。whileとforは、ループの繰り返し回数が明確な時はfor、明確でない時はwhileという使い分けを行うのが一般的です。

forの一般的な使用例は下記のとおりです。

for ($i = 1; $i < 10; $i++) {
echo $i;
}

括弧内のループ条件が(ループ開始時に1回だけ実行; ループ条件; 各ループ後に実行)という構造になっています。

その性質のため、上記のようなループ回数を指定したループを行うのに適しています。一方while文は先のwhile使用例でも言及したとおり、ループ開始時にはループ回数が分からない時に有効です。

whileとfor、どんなループ処理であっても、どちらでも実装することは可能です。実装したいループ処理に応じて、どちらの制御構造がより適しているか検討し、選択してください。

無限ループに注意

while使用例で使用しているwhile (True) ですが、実際に使用する際は注意が必要です。なぜなら、無限ループになる危険性があるからです。

whileを使用する際は、まず括弧内でループ条件を指定できないか、できない場合はbreakは必ず通るかを良く確認し、無限ループにご注意ください。

whileでループ処理を実装してみよう

いかがでしたでしょうか。ループ処理はプログラミングを行ううえで基本となる制御構造です。while文を使いこなして読みやすく、実行効率のよいループ処理の実装を目指しましょう。

【PR】多くの人がプログラミングを諦めてしまう理由をご存知ですか?



近年プログラミングを勉強する人が増えています。

プログラミング学習者の多くは独学から取り組もうとしますが、だいたい80%ほどは3ヶ月も続かずに諦めてしまいます。早い人は1日目で。

多くの人がプログラミングを独学しようとして諦める理由は、次の3つ。
●モチベーションが維持できない
●エラーの原因・解決方法が分からない
●どう学習すればよいか分からない

TechBoostというプログラミングスクールでは、みんなと一緒にプログラミングをするのでモチベーションの維持ができ、分からないことがあればマンツーマンで教えてくれ、徹底的に研究された初心者向けの教材が揃っています。

TechBoostを卒業後、実際にエンジニアとして転職した方もいるほど。

本気でプログラミングを学びたい方は、一度無料のカウンセリングでご相談ください。プログラミングを嫌いになる前に。

tech boostについて

オーダーメイド型の学習コンテンツを提供する「tech boost」 は、エンジニアのキャリア支援に特化したサービスを複数展開している株式会社Branding Engineerが運営しているプログラミングスクールです。最短3ヶ月間で、未経験から『プログラミングの基礎』、『実際に業務で必要となるスキル』、『今のトレンドとなっている知識』まで学べ、ご希望の方にはプロのキャリアアドバイザーによる就業支援を行うことができます。

tech boost卒業生インタビュー

tech boostの卒業生の声を聞きました。あなたがプログラミングを学びたい理由を、一度考えてみてください。
営業→Javaエンジニア→Rubyエンジニアと転向し、第一志望のFinTech企業で働く山下さん
元営業、ビジネスのわかるエンジニアを目指す菅原さん
サンフランシスコに交換留学し、シリコンバレーのVCでインターン中の梅本さん
予備校の営業から半年でエンジニア転職を果たした小田島さん

tech boostの口コミ



Related