前回は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入門記事もありますので、合わせてご確認ください。
コメント