非エンジニアでも知らないとヤバイPHP Part9〜繰り返し処理について理解しよう〜

繰り返し並ぶヒヨコの画像

前回はPHPの条件分岐について説明しました。今回はPHPの繰り返し処理について説明いたします。

繰り返し処理とは

ある条件が満たされるまで、同じ処理が繰り返し実行される処理」のことを、繰り返し処理(ループ処理)と言います。PHPで繰り返し処理を実装するには、いくつか方法があります。

繰り返し処理の実装方法

具体的な実装方法として、今回は以下の4つをご紹介いたします。

  1. for文
  2. foreach文
  3. while文
  4. do{ }while( )文

for文

for文は繰り返し処理の基本となる構文です。書き方は以下の様になります。

<?php
for(開始条件 ; 継続条件 ; 繰り返し処理終了後の条件変更){
実施する繰り返し処理 ;
}
?>


for文の( )の中の区切りには「;(半角セミコロン)」を用います。これだけだと非常にわかりづらいと思うので、具体例をみていきましょう。

<?php
for($i = 1 ; $i <= 3 ; $i++){
print($i);
}
?>


この繰り返し処理では「1 2 3」と表示されます。それぞれ説明します。

開始条件:$i = 1
変数iに1を代入しています。繰り返し処理の変数にはiが使用されることが多いです。諸説ありますが、このiは「integer(整数)」や「index(索引・目盛り)」の頭文字を表しています。今回の開始条件は1としました。

継続条件:$i <= 3
変数iが3以下を表します。変数iが3を超えない限り、{}内の処理は繰り返されます。

実施する繰り返し処理:print($i)
変数iをprint関数で出力しています。

繰り返し処理終了後の条件変更:$i++
変数iに「1を加える」という条件が加わっています。この++の部分ですが
$i = $i + 1(変数への再代入:こちらをご参照)

$i += 1(上の式を省略化した書き方)
と同じです。

従って、$ = 3に加算されるまでは繰り返し処理は実施されます。$i++を実行して$ = 4になった時に初めて継続条件に合致しなくなります。{}の中の処理は実施されず、繰り返し処理が終了することになります。

foreach文(キーを取得しない場合)

foreach文は、配列(配列についてはこちらをご参照)に対する繰り返し処理になります。foreach文が使用できるのは、配列とオブジェクトとなります。他のデータ型に用いるとエラーになりますのでご注意ください。書き方は以下の様になります。

<?php
$array = [値1, 値2, 値3];
foreach($array(配列の変数名) as $value(配列内の要素)){
実施する繰り返し処理;
}
?>

先ほどのfor文と異なるのは、配列の変数を用意していること、()内に配列の変数名を入れること、配列内の要素($valueの部分、名称は自由に設定できます)に対して繰り返し処理が行われることです。具体的にみていきましよう。

<?php
$fruits = ["りんご" , "みかん" , "バナナ"];
foreach($fruits as $fruit){
print("好きな果物は" . $fruit . "です。");

print("今日は" . $fruit . "を食べました。");
}
?>


この繰り返し処理では「好きな果物はりんごです。今日はりんごを食べました。」「好きな果物はみかんです。今日はみかんを食べました。」「好きな果物はバナナです。今日はバナナを食べました。」という結果が表示されます。
流れとしては以下のようになります。

  1. 最初に配列の変数$fruitsを定義します。
  2. foreach($fruits ~ は、この部分で定義した配列を取得しています。
  3. ~ as $fruit) は、$fruitsに格納されている配列の最初の要素である「りんご」を$fruitに代入しています。
  4. {}内の繰り返し処理が実施されます。
  5. $fruitに代入された「りんご」の{}内の処理が実施されたら、次の配列の要素である「みかん」でも3.と4.が実施されます。
  6. 「みかん」でも3.と4.が実施されたら、次は配列$fruitsの最後の要素である「バナナ」も3.と4.が実施されます。
  7. 全ての要素に対して繰り返し処理が完了したら、終了となります。

foreach文(キーを取得する、連想配列の場合)

先ほどのforeach文では、配列にキーが設定されていませんでした。配列のキーも用意されて(連想配列になって)いて、キーも取得したい場合には次のような書き方になります。

<?php
$fruits = ["りんご" => "赤" , "みかん" =>"オレンジ" , "バナナ" => "黄"];
foreach($fruits as $key => $value){
print($key ."は" . $value . "色です。");
}
?>


こちらは「りんごは赤色です。」「みかんはオレンジ色です。」「バナナは黄色です。」と表示されます。先ほどのforeach文と比較すると「$key => 」が追加されていることがわかります。ここに配列の各要素のキーであるりんご・みかん・バナナが代入され、値の赤・オレンジ・黄は$valueに代入されます。

while文

while文でも繰り返し処理は可能です。書き方は以下のようになります。

<?php
初期条件
while(条件式){
実施する繰り返し処理;
条件を変更する処理;
}
?>


条件式がtrueの場合に{ }内の処理が実行されます。while文は書き方にいくつか注意があります。特に注意していただきたいのは、初期条件と条件を変更する処理に関してです。具体例をいくつか見ていきましょう。

【具体例1】
<?php
$num = 1;
while($num <= 3){
print($num);
$num++;
}
?>


問題なく「1 2 3」と出力できると思います。

【具体例2】
<?php
$num = 1;
while($num <= 3){
$num++;
print($num);
}
?>


次はどうでしょう。中の繰り返し処理と条件を変更する処理の順番を入れ替えてみました。今度の結果は「2 3 4」と出力されると思います。これはwhile文の中の{}で順次処理されているからです。順を追うと

  1. $num = 1 は$num <= 3がtrueなので{}内の処理が実行される。
  2. $num++ で$numに代入されている値は2になる。
  3. print($num); で2が出力される。

となっています。print関数を用いる前に$numをインクリメント(1を加算)しているため、「2 3 4」となります。4に関しては3より大きいです。ですがこの4は$num = 3の時に{}内の処理に以降した後、$num++で$numに4が代入されるため、print関数を実行して4が表示されることになります。
この様に、実行の順序には注意が必要です。

【具体例3】
 ※こちらは処理が止まらなくなる(無限ループ)ため、実行しないでください
<?php
while($num <= 3){
$num = 1;
print($num);
$num++;
}
?>


この場合、冒頭に書きましたが処理が止まらなくなります(11111…..)。これは初期条件として使用している$numが、while文の{}内にあることが原因です。

  1. $numに1を代入してprint関数を実行するため、1が表示されます。
  2. その後$num++で$numには2が代入されます。
  3. $num <= 3がtrueです。while文が再度実行されます。{}内の最初に$num = 1;があるため、再度1が代入されます。1.の部分に戻ってしまいます。

【具体例4】
※こちらも処理が止まらなくなる(無限ループ)ため、実行しないでください
<?php
$num = 1;
while($num <= 3){
print($num);
}
?>


こちらも冒頭に書きましたが、無限ループ処理になります。while文内で条件を更新する処理の記載がありません。$num =1は変更されず、$num <= 3がtrueのままになってしまいます。
具体例を4つ挙げましたが、while文を書く際はいくつか注意していただければと思います。

do{ }while( )文

do{}while()文はwhile文とほぼ同じです。書き方は以下のようになります。

<?php
初期条件
do {
実施する繰り返し処理
} while (条件式);
?>


while文と1点違うのは、構文の構造上、先に繰り返しの処理を行ってから条件の判定を行うことです。少なくとも1回は条件の処理が実行されます。具体例を見ていきましょう。

<?php
$num = 5;
do {
print("数字は10以上です。")
} while ($num >= 10);
?>


「数字は10以上です。」と表示されたかと思います。これはdo{}内の繰り返し処理を先に1度実行してからwhile()内の条件式の判定を行なっているためです。pirnt関数が実行されたあと、$num >= 10の条件でfalseが返却されているため、そこで処理が止まります。よって、do{}while()文では、少なくとも1回は繰り返し処理が行われます。

まとめ

いかがでしたでしょうか。今回はPHPでの繰り返し処理をご紹介いたしました。
次回はPHPにおける関数を紹介していきます。

最後に

プログラミングを独学で行うと挫折することがしばしばあります。プログラミングを学んでみたい方、短期間でプログラミングを身につけたい方は64時間で”なりたい”を叶えるプログラミングスクール「WISH」にお気軽にお問い合わせください。現在無料カウンセリングや、入会金無料キャンペーン、さらに受講料20%オフのキャンペーンを開催しております。

関連記事