こんにちは、大学院でIT系の研究を専攻している、ひらりんです。
PHPはサーバーサイドで動く言語で、世界中の多くのWebサイトがPHPによって記述されています。一括してコンパイルするのではなく、実行時に一行ずつコンパイルされることから、随時コードを確認できるのも、初心者が取り掛かりやすい理由のひとつです。
本記事では、PHPのループさせる方法について説明します。PHPのループ処理に用いる構文は数種類あり、使い方や特徴の違いに迷っちゃいますよね。基本構文の解説だけでなく、実践的な用途を想定したコード例を用いた説明もするので、PHPの学習を始めた方やプログラムを書く予定の人はぜひ読んでみてください!
目次
そもそもループ処理とは?
ループは、同じ処理を繰り返し、対象の値等を変化させて実施する、制御構文の1つです。各配列に格納された値や、ある変数に対して同様の処理を何度もプログラムに書くのは、冗長して見栄えが悪いだけでなく、効率も悪いですよね。
実行してほしい処理を1回だけ記述し、それを繰り返してくれるのがループ処理となります。他にも関数化してしまうなどといった解決法もありますが、ループ処理は初心者でも理解してしまえば簡単に書けるのでおすすめです。
PHPに準備されている、ループ処理の際に用いる構文には大きく分けて3つあります。それぞれの基本構文や特徴、実際のプログラムに組み込むことを想定したコード例を用いた説明をします!
PHPのループ処理
PHPのループ処理には、“foreach文”、”while文”、”for文”の3つに大別されます。他のプログラミング言語では、”for”と”while”についてはだいたい用意されてますが、PHPにはその他に”foreach”を用いてループ文を書けます。では、それぞれ詳しく解説します。
foreach文
foreach文は、配列に格納されている値に対して、順にアクセスして処理をしたいときに用いられます。PHPの配列は、0から順に番号が自然に振られているリストであるため、別の変数を用いてループ回数をカウントする必要もなく、PHPのループ処理の中では最も使用頻度が高いと言っても過言ではありません。
基本構文
1 2 3 4 5 6 7 8 9 |
// 添字配列の場合 foreach (配列名 as 変数名){ // 配列に格納されている各要素に対しての処理事項 } // 連想配列の場合 foreach (配列名 as キー => 変数名){ // 配列に格納されている各要素に対しての処理事項 } |
foreach文は、PHPの2つの配列である添字配列と連想配列どちらに対しても使用できます。添字配列と連想配列について分からない方は、以下の記事を参考にしてください。
参考 【初心者向け】PHPの配列の使い方を解説!ウェブカツ ブログforeachの直後の小括弧()内に、アクセスしたい配列名を記述します。as以下に、添字配列では変数名を書きます。これは、配列内の各要素にアクセスし取り出した値を、foreach文のループ内で扱うために格納する変数です。
一方、連想配列では、as以下に配列内の各要素のキーと変数をセットで取り出すことができます。連想配列のキーを取り出さずに、添字配列と同様に変数名だけ記述し取り出すこともできますが、セットで取り出せるのはとても便利ですね。
- 配列に順にアクセスしたいときに使用
- foreach (配列名 as 変数名) { } と記述する
- ループ回数のカウントは不要
- 連想配列の場合は、キーもセットで取り出せる
実践プログラム例
foreach文を用いた実践用途を想定したコード例を見てみましょう。ここでは、連想配列に対して順にアクセスするループ制御文を書きます。
1 2 3 4 5 6 7 |
// 連想配列$foodを定義 $food = ['Egg' => '卵', 'Meat' => '肉', 'Fish' => '魚']; // foreach文で、配列$foodの各要素に順にアクセス foreach ($food as $English => $Japanese) { // キーは$English、値は$Japaneseに格納 echo $English. 'の和訳は'. $Japanese. 'です'; // 「○○の和訳は△△です」と表示される } |
2行目で連想配列$foodを定義しています。ここでは、要素が英語と日本語がセットになっている配列が定義されてますね。5行目でforeachを用い、$foodのキーについては変数$Englishに、値については変数$Japaneseにそれぞれ格納するようになっています。
$food内の要素に順にアクセスし、6行目で要素に応じた処理内容が記述されています。今回は順に、「Eggの和訳は卵です」「Meatの和訳は肉です」「Fishの和訳は魚です」と表示されます。
このように、foreach文は、配列名と変数名を記述することで、ループ文を定義することができます。注意点として、ループ処理の最後を終えたあとに、変数名と格納された値は保持された状態になるため、以降のプログラムに響かないように考慮してください。
while文
while文は、条件を設けてループをする際に用います。配列だけでなく、変数にも用いることができます。foreach文は配列すべてにアクセスするときに向いている一方で、途中でループ処理を止めたい条件があるときにおすすめです。
基本構文
1 2 3 |
while (条件式) { // 変数や配列に対しての処理事項 } |
while文は、whileの直後の小括弧()内に条件式を書きます。この条件を満たしているときに、中括弧{}内に書かれている処理が実行されます。条件を満たさなくなった場合、括弧内の処理は実行されず、プログラムも次へ遷移します。
一方で、ループさせるためにはループ回数をカウントする変数を用いた処理が必要です。増減式などを用いて、数値を評価させることでループできます。次のプログラム例で実際に見てみましょう。
- 条件を設けて配列や変数にアクセスしたいときに使用
- while (条件式) { } と記述する
- ループカウントを表す変数を予め定義する必要がある
実践プログラム例
1 2 3 4 5 6 7 8 9 10 11 |
// ループ回数numの初期値を定義 $num = 0; // 配列$countryを定義 $country = ['Japan', 'China', 'Korea', 'Thailand', 'India']; // $numが5未満のときに実行されるループ文を定義 while ($num < 5) { echo $country[$num]; // $numの値に応じて、$countryの要素を表示 $num++; // 増減式を用いて、$numの値を+1する } |
2行目で、whileのループ文に用いるための変数$numを定義しています。この変数に格納される値によって、while文の括弧{}内を処理を実行するか判断します。5行目で、配列の$countryを定義してます。PHPの配列は順序付きリストなため、左から順に0,1,…と番号が振られています。
8行目からwhile文が記述されていますね。今回は、$numの値が0~4までループされるようになっています。9行目では、$numの値によって$countryに格納された要素が表示されます。10行目は、$numの値を1増やす処理がされているため、$numの値が0の処理が終わったら$numの値が1の処理が始まるといったループ文が成り立つのです。
for文
for文も、基本的にはwhile文と一緒で、条件を設けたループ処理を実行したい際に用いられます。while文の違いとして、ループに必要なカウント数などの情報を、予め定義するのではなく、for文を宣言する際に定義するようになっています。while文より、プログラムの見た目がすっきりします!
基本構文
1 2 3 |
for (初期値の定義式; 条件式; 増減式) { // 変数や配列に対しての処理事項 } |
for文は、forの直後の小括弧()内に3つの式を書きます。1つ目はループカウント数の初期値を定義する式、2つ目はループカウントの変数に対する条件式、3つ目はループカウントを表す変数に対する増減式です。
左から順に、初期値の定義をした後、条件式を満たしていたら中括弧{}内の処理が始まり、最後に増減式の操作を実行します。条件を満たしていないときはループを脱出します。では、実際のコード例を見てみましょう。
- while文と使う場面はほぼ同じ
- for (初期値の定義式; 条件式; 増減式) { } と記述する
- whileより見た目はすっきりする
実践プログラム例
1 2 3 4 5 6 7 |
// 配列$countryを定義 $country = ['Japan', 'China', 'Korea', 'Thailand', 'India']; // $numが5未満のときに実行されるループ文を定義 for ($num = 0; $num < 5; $num++) { echo $country[$num]; // $numの値に応じて、$countryの要素を表示 } |
while文の実践プログラム例と同様のプログラムを、for文を用いて書き換えました。5行目からfor文が始まり、forの直後の小括弧()内に3つの式が書かれています。最初はループカウントを表す$numの初期値を定義、2つ目の式に変数$numの値に対する条件文、3つ目は変数$numの値を1増やす増減式です。
なお、6行目で表示される配列$countryの要素は、while文と同様で’Japan’、’China’、…とループするたびに表示されます。
まとめ
いかがでしたでしょうか?今回は、PHPのループ処理の方法について説明しました。
それぞれの繰り返し制御構文の特徴や使用方法を理解し、使い分けることでプログラムの効率性が上昇します。ぜひ、PHPのforeach・while・forについて理解し、Webサービス作成やシステム構築に活かしてください。