【作って納得!PHP入門】for文を使ってみよう(繰り返し処理)

PHP

前回はswitch文について記載しました。

今回は繰り返し処理(ループ)のfor文について見ていきます。

最初にfor文についての説明をします。
その後に、実際に簡単なプログラムを作成して、for文について学んでいきます。

この記事の目標(作るもの)について

for文を使用した簡単なプログラムを作成し、下記のように画面に結果を出力して確認します。

PHPのfor文とは?

PHPのfor文も他の言語と同じように、繰り返し処理(ループ)するために使用します。
実際の構文としては、このようになります。

for (カウンタの初期値; 継続条件; カウンタの更新) {
  // .....繰り返す処理を書く.....
}

forから始まって、最初に[カウンタの初期値]を変数で定義します。
これはループするごとに[カウンタの更新]で、更新されていきます。

[継続条件]がtrue(条件に合っている)の場合に、繰り返し処理が続きます。
中括弧の { から } までの間の処理が、繰り返し処理が続く間は処理されます。

ループの最後まで行って、ループの頭に戻ると[カウンタの更新]が動作します。
この後、[継続条件]が再評価され、trueになる場合はもう一度、処理を行うことになります。
[継続条件]がfalseになる(条件に合わなくなる)まで、処理が続きます。

ざっくりと概念を説明しましたが、わかりにくいかと思います。
実際にコードを書いて、確認していきましょう。

無限ループについて

無限ループは継続条件の箇所が、ずっとtrueになってfor文の処理が終わらない状態のことです。

カウンタの初期値と更新する値、継続条件をしっかりと意識して書かないと、無限ループになってバグを作り出す要因になります。
PHPでもfor文を使う場合は、使用する値に気をつけて使うようにしましょう。

PHPでfor文を使ってみよう

実際にfor文を使用して、処理を書いてみましょう。
前回作成したcodelike_web_dockerの配下に、hello_sweets_for.phpという名前で下記の内容で保存します。

<?php

echo "for test1<br />";
for ($i = 0; $i < 5; $i++) {
    echo "Hello{$i}"."<br />";
}

echo "<br />for test2<br />";
$sweets = ["クッキー", "キャンディ", "チョコレート", "ビスケット"];
for ($i = 0; $i < count($sweets); $i++) {
    echo "{$i}. {$sweets[$i]}"."<br />";
}

echo "<br />for test3<br />";
for ($i = (count($sweets)-1); $i > -1; $i--) {
    echo "{$i}. {$sweets[$i]}"."<br />";
}

解説

単純なHelloを出力する

最初は単純に”Hello[n]”を出力する処理です。([n]はカウンタの数値)
[カウンタの初期値]は$i = 0としています。これで$iは0から始まります。

for ($i = 0; $i < 5; $i++) {

[継続条件]は$i < 5としています。
この条件によって、$iが0から4まで(true)の間、処理が続きます。

[カウンタの更新]は$i++となっています。
処理が終わって、ループの先頭に戻ってくると、$iが1足されます。
そして[継続条件]が再評価されます。[継続条件]があわない場合は繰り返し処理を抜けます。

{ から } の出力処理が行われて、ここでは“Hello0”, “Hello1″… と5回出力されます。

配列の全ての要素を出力する

次の処理は、4つのお菓子の名前を入れた$sweetsという配列を用意して、全ての名前を出力しています。

for ($i = 0; $i < count($sweets); $i++) {

[カウンタの初期値]は、先ほどと同じように0から始まっています。
[継続条件]は$i < count($sweets)となっています。

ここでcountが登場しています。このcount関数は配列の要素数を返してくれます。
なので、count($sweets)は4になって、[継続条件]は$i < 4になります。

[カウンタの更新]は$i++になっています。
ループの先頭に戻ると、これで$iが「+1」されますね。

出力箇所は“{$i}. {$sweets[$i]}”となっています。
これで、カウンタの数字と配列の要素が出力されます。“0. クッキー”, “1. キャンディ”… というように出力してくれます。

配列の全ての要素を逆順に出力する

カウンタの値を工夫すると、ループする回数を制限したり、カウンタの値をスキップしたり(2ずつ増加させるなど)することができます。
ここでは、先ほどのお菓子の名前の配列の値を逆から出力してみています。

for ($i = (count($sweets)-1); $i > -1; $i--) {

[カウンタの初期値]は、(count($sweets)-1)となっています。
count($sweets)は4になりますが、配列は0からなので、最後の配列の番号は3になります、
なので、(count($sweets)-1)は3になり、$iは3から始まります。(最後の値から出力したいため)

[継続条件]は$i > -1となっています。
なので、$iが0になるまでは、ループの処理が行われます。
0の要素が出力されると、$iは「-1」になって処理が終わります。

[カウンタの更新]は$i--です。
これを設定しているため、ループ毎に$iが引かれて(-1)いきます。

出力箇所は先ほどと同じように、“{$i}. {$sweets[$i]}”となっています。
これで、“3. ビスケット”, “2. チョコレート”… というように逆順に出力してくれます。

動作確認

想定通りの結果が出力されているか確認してみましょう。前回作成した環境を立ち上げます。
hello_sweets_for.phpの編集が終わったら、保存して下記にアクセスします。

想定した結果が返ってきました!

おわりに

今回はfor文を見ていきました。

配列を使用する場合などに登場することが多いです。
初期値や更新する値に気を使って書いていかないと、バグを生み出す要因になるので気を付けましょう。

その他のPHP入門のオススメ記事

そのほかに、このブログで書いているオススメ記事をご紹介します。

foreach文を使ってみよう

次回は作った環境を使用して、PHPのforeach文を使ってみましょう。

PHP入門の記事一覧に戻る

他のPHP入門記事もありますので、合わせてご確認ください。

参考

公式ドキュメント – for
PHP: for - Manual

コメント

タイトルとURLをコピーしました