PHP PHP入門講座 プログラミング

【PHPプログラミング入門講座】配列とループ処理 (foreach文)

PHPプログラミングのキービジュアル

複数の値をまとめて扱う

あなたが八百屋さんを経営していたとします。
現在の商品とそれぞれの値段は次の通りです。

名前 値段
トマト 110円
きゅうり 90円
なす 80円
キャベツ 100円
にんじん 60円

これら商品の値段をすべて15円引きにした価格を表示する処理をPHPプログラムで作ってみましょう。
どのように作ると良いでしょうか?

配列

まずは、これらの商品の値段を変数に代入してみましょう。
次のように書くことができます。

<?php
  $price1 = 110;
  $price2 = 90;
  $price3 = 80;
  $price4 = 100;
  $price5 = 60;

ただこの書き方だと、今は対象が5個だから良いですが、10個、20個、、、と数が多くなった場合に書くのが大変ですよね?

このような場合は、PHPの「配列」を使うと、複数の値を一つの変数にまとめて代入でき、プログラムをよりシンプルに書くことができます。
配列を使うと次のようになります。

<?php
  $priceList = [110, 90, 80, 100, 60]; 

全ての商品の値段に対する変数を書く必要がなくなり、かなりシンプルになりました。

配列の構文は次の通りです。

<構文>

変数 = [値1, 値2, 値3, 値4, ...];

ここで、値1, 値2, 値3, 値4, ... の配列の各値のことを「要素」と呼びます。
また、[値1, 値2, 値3, 値4, …]という形の値を変数に代入することで、左側の変数のデータ型は「配列型」になります。

配列の各要素の値の参照

配列の各要素を参照するには、配列の変数名に、要素の番号を[ ]内に記述したモノを付け加えます。
$priceList[番号]
という形です。
この配列の変数名の後ろに記述する番号のことを「インデックス 番号」と呼びます。

各配列の要素を表示するプログラムは次のようになります。

<?php
  $priceList = [110, 90, 80, 100, 60]; 
  echo $priceList[0] . '円<br>'; //1番目を表示
  echo $priceList[1] . '円<br>'; //2番目を表示
  echo $priceList[2] . '円<br>'; //3番目を表示
  echo $priceList[3] . '円<br>'; //4番目を表示
  echo $priceList[4] . '円<br>'; //5番目を表示

[ ]の中に書いてある番号0, 1, 2, 3, 4がインデックス 番号です。
そして「配列のインデックス 番号は0から始まる」というルールがあります。
つまり、
1番目の要素のインデックス 番号は0
2番目の要素のインデックス 番号は1
3番目の要素のインデックス 番号は2
4番目の要素のインデックス 番号は3
5番目の要素のインデックス 番号は4
になります。

このPHPプログラムを実行すると次のように表示されます。

110円
90円
80円
100円
60円

foreach文

配列を使うと、値の数だけ変数を用意してそれぞれに代入せずに、1つの変数にまとめて代入できることが分かりました。
次に、これらの変数を計算したり、出力したりする処理も、まとめてできると便利ですよね?

配列をまとめて処理する記述方法の一つに「foreach文」があります。
foreach文の構文は次の通りです。

<構文>

foreach(配列A as 変数A) {
  処理A
}

この構文は「配列A」の要素を前から順番に「変数A」に代入して、「処理A」が繰り返し実行される処理が行われます。

このようなブロック内の処理を何度も繰り返して実行する処理のことを「ループ処理」といいます。

この記事の前半で書いたPHPプログラム

<?php
  $priceList = [110, 90, 80, 100, 60]; 
  echo $priceList[0] . '円<br>';
  echo $priceList[1] . '円<br>';
  echo $priceList[2] . '円<br>';
  echo $priceList[3] . '円<br>';
  echo $priceList[4] . '円<br>';

は、foreach文を使って書くと次のようになります。

<?php
  $priceList = [110, 90, 80, 100, 60];
  foreach($priceList as $price) {
    echo $price . '円<br>';
  }

いきなり複雑になりましたので、分かりやすく図を使って説明します。

PHPプログラムのforeach文の説明図

この図を使ってforeach文の説明をします。
図の番号と以下の説明の番号は対応しています。

(1) 変数$priceListに[110, 90, 80, 100, 60]を代入します。
 (ここで変数$priceListのデータ型は「配列型」になります。)
(2) foreach文に配列$priceListを設定し、「as」を記述して変数$priceを書きます。
 配列$priceListの要素をひとつずつ変数$priceに代入しながら、foreachブロックの中の処理を実行します。
 つまり、foreachブロック内の処理は、配列$priceListの要素数だけ繰り返されます。
(3) 変数$priceの値をechoで出力します。

それでは、このPHPプログラムを実行してみましょう。
ブラウザ画面で確認して次のように出力されたら成功です。

110円
90円
80円
100円
60円

foreach文の書き方について理解できましたでしょうか?

ところで、話を最初に戻しますが、このプログラムの目的は、
「これら商品の値段をすべて15円引きにした価格を表示する処理をPHPプログラムで作ってみましょう。」
でした。

すべて15円引きにする処理を追加するには、どのように書けば良いでしょうか?

早速、答えを書きますが、次のようになります。

<?php
  $priceList = [110, 90, 80, 100, 60];
  foreach($priceList as $price) {
    $price2 = $price - 15; //15円引きする
    echo $price2 . '円<br>';
  }

変数$priceに対して15を引き、それを$price2に代入してから、$price2を出力します。
このプログラムを実行すると次のように表示されます。

95円
75円
65円
85円
45円

これで目的が達成できました。お疲れ様でした!

おわりに

複数の値を[ 1, 2, 3, 4, 5, ...]のようにリスト化して一つの変数に代入すると、配列になります。
配列はforeach文を使って、配列の要素に対して順番に処理をすることができます。
foreach文などを使って、同じ処理内容を繰り返し実行することを「ループ処理」と呼びます。

配列が扱えるようになると数多くのデータをまとめて処理をするようなプログラムが作れるようになります。

徐々にプログラミングらしい内容になっていきました。ひとつずつ理解して進んでいきましょう。

PHPプログラミング入門講座 〜 全記事一覧 〜

-PHP, PHP入門講座, プログラミング
-, , , , ,

Copyright© ハッピー・プログラミング・ライフ , 2020 All Rights Reserved.