YENLAND TIME :  

 Top >  Library  |  印刷する印刷ページ       はてなブックマークに追加 このページを Google Bookmarks に追加 RSS

大区分

その他

中区分

PC

小区分

PHP

項目

4. PHPのループ(繰り返し)処理

入力者 山下章太 更新日 20130114


ここでは、ループ(繰り返し)処理をする方法を幾つか紹介します。

PHPの代表的なループ処理としては、while構文、for構文、do 〜 while構文 と foreach構文 の4つがあります。
大量のデータを処理する際には、どうしてもループ処理を行うことが必要で、ループ処理を使いこなすことで、 複雑な動作を実現させることができます。

■ while構文

whileは、その繰り返しのコードを実行する前に条件式を評価し、条件式が満たされればループ(繰り返し)処理を実行します。
条件式が満たさなければ、ループを実行することがありません。

基本的な記載方法は、下記のようになります。

while(条件式) {
  [条件に合致したときの処理]
}

while構文は、if構文に似ており、条件を判定してから、中カッコ{ 〜 } を実行します。
条件式を満たすことができなければ、ループを実行させることができません。

例えば、if構文の時に利用した例で、タクシーの乗車データで、2000メートルを超える場合に、初乗り料金の730円、 200メートルごとに100円加算されるという計算をしたいとします。
この場合の計算式は、走行距離を$Xメートルとすると、下記の計算式で計算できます。

while($X <= 2000) {
  $Y = 730 + ceil(( $X - 2000 ) / 200 ) * 100;
}

ここで、ceilという関数は小数点以下を切り上げする関数です。

この while構文の条件式は、変数$X の値が2000以下になったときにループから抜けるように設定されています。



■ for構文

for構文も、whileと同じようなループ(繰返し)処理を行いますが、 初期値から増減させるという点が異なります。for文の基本的な書式は以下のとおりです。

for (初期値式; 条件式; 増減式) {

  [処理するスクリプト]

}

この構文は、CやJavaScriptのfor構文とまったく同じ公式です。

初期値式には、ループを繰り返す前に必ず1回だけ実行され、その値に基づいて条件式で評価され、 その値が条件式に合致しているならば、ブロック内の処理スクリプトを実行し、 処理が終わったら増減式で初期値式の値を増やしたり減らしたりします。

【計算例】
先ほどのタクシー料金と同じように、走行距離が1メートルから4000メートルまでの料金を計算してみようと思います。
タクシーの乗車データで、2000メートルまでの場合、初乗り料金の730円、2000メートルを超える場合に、 200メートルごとに100円加算されるという計算をしたいとします。

for($x=1, $x<=4000,$x++) {

  if ($x < 2000){
   $Y = 730;
  }else{
   $Y = 730 + ceil(( $x - 2000 ) / 200 ) * 100;
  }

}

ここでは、変数$xの値は1からスタートして、$x++という加算処理で、1づつ増加しています。
++という処理は、1つ加算するという計算式です。

for構文の中に、if構文があり、走行距離が2000メートルまでか、2000メートルを超えるかを判定して、料金の計算方法を変更しています。



■ do 〜 while構文

do 〜 while構文も、ループ処理を行うものですが、while、for構文は、式を最初に評価してから処理スクリプトを繰り返すループで、 do〜while構文は、処理を最初に行ってから条件式を評価するという構文という違いがあります。

基本的な記載方法は、下記のようになります。

do {
    [処理スクリプト]
  }
  while(式);

PHPは、書かれている順番に実行しますので、do~while構文では、処理スクリプトは条件に関わらず最低1回は実行されることになります。
最初に処理したい場合のループに向いた制御構文です。

先ほどのタクシー料金の計算を、do~while構文で記載すると、下記のようになります。


$x=1;
do{

  if ($x < 2000){
   $Y = 730;
  }else{
   $Y = 730 + ceil(( $x - 2000 ) / 200 ) * 100;
  }

  $x++;

}while($x <= 4000);

for構文では、条件式に、$x++という加算処理が入っていましたが、do~while構文ではありませんので、 1づつ加算する演算を別に入れる必要があります。



■ foreach構文

次に、foreach構文ですが、配列計算を行う時に利用する代表的な構文です。

配列については、後ほど説明しますが、PHPの配列は、Perlの連想配列(ハッシュ)やCのポインタとほとんど同じです。

エクセルのマクロを利用している人は、N×N行列をイメージしますが、PHPの配列は、N×2行列です。
また、連想配列(ハッシュ)やポインタと、VBの配列は概念が全く違いますので、初めは戸惑うことが多いと思います。

VBの場合は、hairetsu()という配列がある場合、その値を取り出すときに、hairetsu(2,2)のように位置を指定します。
これに対して、連想配列(ハッシュ)やポインタは、インデックスに該当する値を取り出します。

例えば、配列が下記のようになっている場合で簡単に説明します。

インデックス
1 りんご
2 バナナ

VBでバナナを取り出すには、hairetsu(2,2)です。

連想配列でバナナを取り出すには、hairetsu(2)です。インデックス=2の値を引っ張ってくるという使い方をします。

話が逸れましたが、まず、基本的なforeach構文は、以下のようになります。配列を全て繰り返して処理します。

foreach( 配列 as $key => $value) {
  [処理スクリプト]
}

少し分かりづらいと思いますが、配列を設定する場合に、$keyによって設定されたキーワードと共に格納されるインデックスと、 $valueに格納されるインデックスとグループ化します。

先ほどのりんご、バナナと入っている配列を利用すると、

$a = array("1" => "りんご", "2" => "ばなな");

foreach( $a as $key => $value) {
  print("$key は、$value");
}

変数$aに格納された配列は、キーワードが「=>」によって2つの値を対にしてそれぞれを取り込んでいます。

foreach構文では、そのキーワードをもとにしてそれぞれの値を、変数$key、$valueにループしながら変換します。
ループは、取り込まれたインデックスの数だけ行われます。

実行すると、「1はりんご 2はバナナ」と表示されます。

このループは、データベースを利用する場合には、とても便利な構文で、覚えておくと非常に役に立ちます。



   はてなブックマークに追加 このページを Google Bookmarks に追加 RSS