第10章 同じ処理を繰り返そう

10.3 foreach文を使って配列を処理しよう

前節の10.2.3でfor文を利用して配列を処理しましたが、PHPにはもっと簡単に配列データを処理できる「foreach(フォーイーチ)文」が用意されています。foreach文を利用するとfor文とは違い、繰り返す回数を決定しなくても、配列の格納データ分だけ自動で繰り返してくれるというメリットがあります。

10.3.1 foreach文で配列データの扱い方

foreach文は配列のそれぞれの要素を順番に取り出して処理するための構文です。要素は配列に入っている各データのことを指しています。繰り返す回数は配列に格納されているデータの数になります。

書式:foreach基本の構文その1

凡例:foreach基本の構文その1

基本的なforeach文は凡例で示した形になります。上記書式の①は必ず配列変数(凡例では$data)を使用し、②では順次取り出される要素の値を代入する要素格納用変数(凡例では$value)を使用します。要素格納用変数の変数名は任意に指定できます。
凡例をイメージで表すと以下の図10.3.1のようになります


図 10.3.1: foreach文のデータ取り出し

実際にプログラムからforeach文の動作を確認していきましょう。

foreach文で配列データを処理するプログラム

foreach文を利用して配列データを処理した結果をWebブラウザから確認してみましょう。

ソース・フォルダー: myproj_intro/ch10
パッケージ: foreachLoop1.php
アクセスURL:http://localhost/myproj_intro/ch10/foreachLoop1.php

foreachLoop1.php

実行結果

解説

8行目で今回のプログラムで使用する趣味データを配列$hobbyに用意しています。array関数を利用する時に特に指定はないので、0番から数値キーを割り振っていきます。


図 10.3.2: 配列$hobbyのデータ格納状況

10~15行目が画面にメッセージを表示する処理になります。
12~14行目がforeach文で、繰り返す対象の処理は13行目の「、と各ループ毎の要素の値」を画面に出力することになります。

今回の実行結果から、配列のデータ数だけループ処理されているのが、正しく確認できました。また、メッセージ部分を処理別に分けると以下の図10.3.3のようになります。


図 10.3.3: foreachLoopの実行結果イメージ

ポイント
  • foreach文を使うと配列の数だけ繰り返し、要素の値を順次処理することができる。
foreach文利用時の注意

foreach文が利用できるのは、「配列変数のみ」です。間違えて普通の変数を設定してしますと、警告メッセージが画面に出てしまいますので間違えないよう利用しましょう。

続いて、foreach文のもう1つの使い方を学習して行きましょう。

10.3.2 foreach文で配列データとキー値の扱い方

前項でforeach文で配列を順次処理するための仕組みは学習しました。foreach文には記述を追加することで、配列のキー値(添え字)を取得し処理に利用することができるようになります。

書式:foreach基本の構文その2

凡例:foreach基本の構文その2

前項の構文その1と比べて①と③は同じですが、②のキー値を格納する変数の設定が増えています。②と③の間はarray関数で連想配列キーを設定したのと同じように、「=>」を記述します。また②のキー値格納変数は③と同じで任意の名前を指定します。
凡例のようにforeachブロック内で$key変数を利用すると、要素に対応したキー値を取得することができ、イメージで表すと以下の図10.3.4のようになります。


図 10.3.4: foreach文のデータとキー値の取り出し

ではforeach文のキー値を使うプログラムを見ていきましょう。

foreach文で配列データをキー値を利用して処理するプログラム

foreach文を利用して配列データを処理した結果をWebブラウザから確認してみましょう。

ソース・フォルダー: myproj_intro/ch10
パッケージ: foreachLoop2.php
アクセスURL:http://localhost/myproj_intro/ch10/foreachLoop2.php

foreachLoop2.php

実行結果

解説

今回のプログラムの実行結果は10.2.3で作成したuseArrayToLoop.phpと同じになっています。
useArrayToLoop.phpでは配列を2つ用意して、for文との連携で全データの表示と合計値を求める処理を行っていましたが、今回のforeachLoop2.phpでは、連想配列1つでforeachのキー値を使う仕組みを利用して同様の処理を行っています。
ここでの処理のポイントはforeach文を利用すると、連想配列1つで2グループのデータ(教科名と点数)を1セットで扱えることです。

8行目で処理に使うデータを連想配列で用意しています。今回はarray関数を利用する際に、文字キーを指定しているので連想配列になります。


図 10.3.5: 連想配列データの格納状況

10~13行目がforeach文になります。変数$valに要素の値を、変数$keyにキー値が代入されるようにしています。11行目では、変数$keyと変数$valを画面に出力しています。図10.3.6のようにループ毎の値は格納順に出力されていきます。


図 10.3.6: foreach文の各要素のデータとキー値の取り出し

今回の実行結果からforeach文のキー値を使う記述方法を利用すれば、連想配列1つで2グループのデータを扱えることが確認できました。

NEXT>> 10.4 繰り返し文を制御する