for文はどのような用途で使えばいいの?
for文を効率よく覚えたいけど何か良い方法はないかな?
PHPでは他のプログラミング言語同様に繰り返し文(ループ文)が用意されています。しかし、PHPの学習を始めたばかりの初学者の場合、繰り返し処理で指定する条件式の記述方法がわからなかったり、実際にどんな用途で使うのかいまいちわからなかったりするのではないでしょうか?
こんにちは!さまざまな言語を駆使して業界を渡り歩いたエンジニア歴10年のヤマシタです。
今回解説するfor文の機能について、いまいちわかっていない方でも丁寧に解説していくので、ぜひこの記事で学んでいってください。初心者必見の内容となりますので、最後まで読んでいただいてPHPのfor文について理解を深めていただければ幸いです。
この記事はこんな人のために書きました
- for文の基礎の基礎を学びたい方
- forのさまざまな操作方法を知りたい方
- 繰り返し処理全般について知りたい方
最後まで読み進めることで、for文の基礎から応用、for文以外の繰り返し処理についても基礎がわかるようになっていますのでぜひ参考にしていただければと思います。
PHPのfor文とは
そもそも繰り返し処理とは
繰り返し処理とは、同じ動作を繰り返し実行することを言います。繰り返し処理を英語ではlooping statement(ルーピングステイトメント)と言い、ループ処理とも呼ばれています。
繰り返し処理は以下の場合によく使われます。
- 同じ処理を繰り返し実行したい
- 1~100の数字にそれぞれ2を掛けてその積を出力させたい
- 箇条書きになっている内容全てを表にして出力させたい
ループ処理を有効活用することにより、よりシンプルなコードが書け、素早く作業を行うことができます。
for文の繰り返し処理とは
for文は処理を繰り返し行うときに使用するループ文です。主に繰り返す回数が決まっている場合に使用します。
配列とオブジェクト以外にも、他のデータ型(数値型や文字列型など)を構文で指定することができます。for文は繰り返し処理の中ではもっとも汎用性が高いため、よく使われるループ文となります。
PHPにはfor文の他にforeach、whileなどの繰り返し処理もあります。foreach、whileの処理についても本記事で解説していきますので合わせて参考にしてください。
PHPのfor文のこれだけは覚えておくべき3つのポイント
その1 for文の書き方を理解しよう
for文の使い方に入る前に、まずfor文の書き方についてしっかり理解しておきましょう。
for文は以下のように記述します。
for (初期値; 条件式; 増減式){ 処理 … }
条件式がtrueの場合は{(波括弧)内の処理が実行され、FALSEの場合はfor文の処理が終了します。繰り返しごとに増減式が評価され、指定した値が増減します。
for文を使用することで、さまざまな繰り返し処理を実行することができます。次項よりfor文を使った繰り返し処理の使い方を見ていきましょう。
その2 for文の使い方を理解しよう
ここではfor文の使い方を見ていきましょう。以下にfor文を使用した簡単なプログラムを紹介します。
0~10までの数字を縦に並べて出力します。
<?php for($val = 0; $val <= 10; $val++){ echo $val. '<br/>'; } ?>
実行結果:
0 1 2 3 4 5 6 7 8 9 10
初期値$valはfor文での繰り返し処理時に無条件で実行され、初期値を元に「 $val <= 10」の式が評価されます。式の結果がTRUEの場合は繰り返し処理が実行され、FALSEの場合はループの処理が終了します。
このプログラムの処理の流れは以下のようになります。
- 初期値$val=0を指定
- valが10と等しい、または10以上になるまで繰り返す
- echoで$valが10になるまでループし表示
次にfor文のネスト方法についてみてみましょう。ネストは入れ子とも呼ばれていて、for文の中にfor文を入れる(重ねる)ことを言います。
ネストすることにより、コードがシンプルになるメリットがありますが、何重にもしてしまうと、どういう動作をしているかが分かりにくくなってしまうため、2重、3重くらいまでにするのがおすすめです。
for文のネストは以下のように記述します。
for (初期値; 条件式; 増減式){ 処理1 for (初期値; 条件式; 増減式){ 処理2 … } }
1つ目のfor文の中にある処理1はなくても問題ありません。1つ目のfor文で条件式がTRUEの場合に2つ目のfor文へ行き、2つ目のfor文にある条件式がFALSEになるまで繰り返し実行されます。
2つ目のfor文がFALSEになると、1つ目のfor文へ戻り、条件式がTRUEになったら2つ目のfor文に行く、という繰り返しになり、1つ目のfor文の条件式がFALSEになったら終了となります。
for文の練習問題でよく見かける1~9の段までの掛け算(九九)を出力してみます。
<?php //↓1の段から9の段までを出力させるための初期値と条件式、増減式を設定 for($val = 1; $val <= 9; $val++){ //↓1~9までを掛けるための初期値と条件式、増減式を設定 for($val2 = 1; $val2 <=9; $val2++) { //↓スペース、1~9の段の値×1~9=積、スペースを出力 echo ' '. $val. '×'. $val2. '='. $val*$val2. ' '; } //↓1段終わるごとに改行を出力 echo '<br/>'; } ?>
実行結果:
1×1=1 1×2=2 1×3=3 1×4=4 1×5=5 1×6=6 1×7=7 1×8=8 1×9=9 2×1=2 2×2=4 2×3=6 2×4=8 2×5=10 2×6=12 2×7=14 2×8=16 2×9=18 3×1=3 3×2=6 3×3=9 3×4=12 3×5=15 3×6=18 3×7=21 3×8=24 3×9=27 4×1=4 4×2=8 4×3=12 4×4=16 4×5=20 4×6=24 4×7=28 4×8=32 4×9=36 5×1=5 5×2=10 5×3=15 5×4=20 5×5=25 5×6=30 5×7=35 5×8=40 5×9=45 6×1=6 6×2=12 6×3=18 6×4=24 6×5=30 6×6=36 6×7=42 6×8=48 6×9=54 7×1=7 7×2=14 7×3=21 7×4=28 7×5=35 7×6=42 7×7=49 7×8=56 7×9=63 8×1=8 8×2=16 8×3=24 8×4=32 8×5=40 8×6=48 8×7=56 8×8=64 8×9=72 9×1=9 9×2=18 9×3=27 9×4=36 9×5=45 9×6=54 9×7=63 9×8=72 9×9=81
このプログラムの処理の流れは以下のようになります。
- 1つ目のfor文で$val=1のとき、条件式$val <= 9はTRUEになるので、for文2へ
- 2つ目のfor文内で$val2がループして1~9までの値を1つずつ取得
- echoで計算式とスペース(’ ’)、$valと$val2の積を出力
- 2つ目のfor文で$val2の値が10以上になるとFALSEになり、1つ目のfor文へ戻る
- 1つ目のfor文がFALSEになるまで上記の繰り返しとなる
その3 for文でのスキップや中断について理解しよう
決まった回数で繰り返し処理ができる便利なfor文ですが、場合によっては処理をスキップしたり、繰り返し処理を中断したい場合があります。そのような場合は処理をスキップするcontinueや処理を中断するbreakを使用すると便利です。
それぞれの処理について見ていきましょう。
処理をスキップするcontinue
continueは繰り返し処理内で残りの処理をスキップして、次の繰り返しから処理を継続させるために使用します。
continueは繰り返し処理をスキップさせたい箇所で以下のように記述します。
continue;
以下の処理では$valの値が5の場合はcontinueで繰り返し処理をスキップさせています。
<?php for($val = 0; $val <= 10; $val++){ if ($val == 5){ echo 'continue'. '<br/>'; continue; } echo $val. '<br/>'; } ?>
実行結果:
0 1 2 3 4 continue 6 7 8 9 10
continueで処理をスキップした場合は以降の「echo $val. ‘<br/>’」が実行されず、繰り返し文の最初から処理が再開されていることがわかりますね!
処理を中断するbreak
breakは繰り返し処理内で処理を中断して、for文の繰り返し処理自体を終了させたい場合に使用します。
breakは繰り返し処理を中断させたい箇所で以下のように記述します。
break;
以下の処理では$valの値が5の場合はbreakで繰り返し処理を中断させています。
<?php for($val = 0; $val <= 10; $val++){ if ($val == 5){ echo 'continue'. '<br/>'; break; } echo $val. '<br/>'; } ?>
実行結果:
0 1 2 3 4 break
breakで処理を中断した場合は以降繰り返し処理が実行されず、for文が終了していることがわかりますね。
for文に似たその他の繰り返し文
while文とは
while文は繰り返しを行うときに使用するループ文で、PHPの中では最も簡単なタイプのループ処理となります。
while文の構文は以下となります。
while(条件式){ 処理; ... }
while文は条件式の結果がTRUEの場合に繰り返し処理が実行され、FALSEの場合はwhile文の処理を終了します。while文が初めからFALSEの場合は、while文の繰り返し処理が実行されることはありません。
以下にwhile文を使用した簡単なサンプルを紹介します。
0~9までの数字を出力します。
<?php $val = 0; while ($val < 10) { echo $val; $val++; } ?>
実行結果:
0123456789
このサンプルでは、条件式で$valの値が10より小さい場合に限り繰り返し処理を実行します。
そのままでは「0」の無限ループとなってしまいますので、インクリメント「$val++」で繰り返し処理ごとに$valの値に1を足してループさせています。
while文の注意点
while文はfor文のように増減式が無くてもいいため、処理を誤るといつまでも条件式がTRUEのままで、無限ループとなってしまう可能性がありますので、扱いには注意しましょう。
while文については以下の記事でも詳しく解説していますのでぜひ参考にしてください。
foreach文とは
foreach文とは、主に配列の値を取得したり操作するときに使用する配列専用のループ処理となります。for文やwhile文では条件を設定してループ処理を行いますが、foreach文では配列の要素分ループ処理が行われます。
つまり、foreach文は要素数が多い配列や、データベースにあるたくさんの情報を順に取り出したい時などにとても便利です。ただ、foreachが使用できるのは主に配列とオブジェクトのみで、他のデータ型(数値型や文字列型など)や初期化前の変数を指定すると、エラーとなりますので注意しましょう。
foreach文の構文は以下のように記述します。
foreach ($配列 as $value){ 処理 … }
連想配列のキーと値を指定する場合は、以下のように記述します。
foreach ($配列 as $key => $value){ 処理 … }
現在の配列の要素の$key(箱の名前)と$value(箱の中身)に配列の値それぞれがforeachでループ処理で代入されます。代入したら内部ポインタが1つ進められて、次のループ時には次の配列の要素の値を取得することができます。
foreach文を使用することで配列の値を1つずつ取得することができます。以下にforeach文を使用した簡単なプログラムを紹介します。
フルーツという名前の配列にリンゴ、オレンジ、メロン、バナナ、パイナップルのフルーツを入れ、それらを順に取り出します。
<?php $fruits = ['apple', 'orange', 'melon', 'banana', 'pineapple']; foreach($fruits as $value){ echo $value; echo '<br>'; } ?>
実行結果:
apple orange melon banana pineapple
このプログラムでは値(appleやorangeなど)を設定した配列の変数名($fruits)をforeach文で指定し、値を1つずつ取得して出力しています。$valueには$fruitsの中にある値が1つずつ代入され、echoで$valueの値と改行(‘<br/>’)を出力する、という処理を値の数分(ここでは5回分)foreachで繰り返しています。
foreach文については以下の記事でも基礎から応用まで詳しく解説していますので、ぜひ参考にしてください。
PHPについてもっと学びたい方へ
ここでは、PHPのfor文など繰り返し処理について初心者でも無理なく進められるように解説してきました。プログラミングを身につけるためには、たくさんのトライ・アンド・エラーが必要です。しかし、PHPはできることがたくさんある分、非常に奥の深い言語です。
PHPのスキルを身に着けられるか不安・・・
PHPを体系的に勉強したい
と感じている方は以下の記事も合わせてご覧ください。
PHPの概要から基本的な使い方まで網羅していますので、きっと参考になるのではと思います。
まとめ
今回はPHPのfor文について、for文の概要から書き方、基本的な使い方から実践的な使い方など網羅的に解説しました。for文は繰り返し同じ処理をしたいときに、とても便利なものであることがわかったと思います。
実際の業務では繰り返し処理を駆使してさまざまな処理を行うことになりますので、使い方についてはしっかりとマスターしておきましょう。