PHPプログラミング

最終更新日:
公開日:

入門

第11章 foreach文

この章では、while文・for文に続いてループの基本構文であるforeach文について学んでいきます。このforeach文を含めた3種類のループ処理を扱えると、書けるコードの幅がぐっと広がるはずです。

目次

基本的な書き方

foreach文は、while文やfor文と同じループ処理を行うためのものですが、少し違った特徴を持っています。
図1が基本的な形となります。

図1:

foreach文の基本的な形

他のループ文と異なるのは、foreach文では配列を扱うためのループ文であるため、「条件式」を必要としない点です。

foreach文に配列を渡すと、配列の先頭から値を1つずつ取り出して「配列のキー」と「配列の値」をそれぞれ取得し、{}内の処理を実行します。
処理が終わったらforeach()へ戻り、配列の次の値を取得してまた処理を実行します。この処理を、配列の最後の値まで繰り返したらforeach文が終了します。

コードでみるforeach文の動作

ツラツラと説明するよりも、実際にコードを書いてみて動作を確認した方が分かりやすいはずです。
早速、下記のコードを打って実行してみましょう。

コード例

<?php
$item = array();
$item[0] = array(
	"name" => "ジーンズ",
	"price" => 7980,
	"size" => "M"
);

$item[1] = array(
	"name" => "Tシャツ",
	"price" => 2980,
	"size" => "M"
);

$item[2] = array(
	"name" => "パーカー",
	"price" => 4400,
	"size" => "M"
);

foreach( $item as $key => $value ) {
	echo "<p>" . ($key+1) . "個目の商品<br>";
	echo $value['name'] . "(サイズ:" . $value['size'] . ") " . $value['price'] . "円</p>";
}

配列に設定した商品の一覧が表示されたでしょうか。

出力例

1個目の商品
ジーンズ(サイズ:M) 7980円

2個目の商品
Tシャツ(サイズ:M) 2980円

3個目の商品
パーカー(サイズ:M) 4400円

コードの動作を順に見ていきましょう。
配列の宣言までは前章と同様なので省略します。

まずはforeach文の()内で、宣言した配列を渡すところから解説します。次の図2は、foreach文に渡された配列から1つ目の値を取り出し、「キー」と「配列の値」をそれぞれforeach文の変数へセットするところをイメージしたものです。

図2:

配列から値を取り出すイメージ

配列のキーを$keyへ、取り出した値を$valueへ代入し、{}内の処理を実行します。
foreach文中の処理では、ここで代入した変数から「キー」と「配列の値」へアクセスすることができます。今回のコードでは、キーは「◯◯個目の商品」の出力するところで使用し、配列の値は商品名、サイズ、価格を出力するそれぞれの箇所で使用しています。

図3:

「キー」「配列の値」を出力している関係イメージ

これが、配列の長さだけ(上のコードでは3回)繰り返されます。

ちなみに、キーの値は省略することもできます。今回のコードで「◯◯個目の商品」の出力部分が不要であれば、$keyを省略して次のように書くことができます。

コード例

<?php

// ----- 配列の宣言は先ほどと同じ ----- //

foreach( $item as $value ) {
	//echo "<p>" . ($key+1) . "個目の商品<br>";    ※この行はコメントアウト
	echo $value['name'] . "(サイズ:" . $value['size'] . ") " . $value['price'] . "円</p>";
}

まとめ

foreach文の扱い方を見てきました。配列の処理をするときに大活躍するループ文です。
キーや配列の値を入れる変数に$key$valueを使ってきましたが、ここの変数名は自由に付けることができます。多くの場合は上記の書き方で問題ありませんが、「すでに他の部分で$value変数を使ってしまっている」などの場合は必要に応じて変更してください。

この章で学んだこと

  • 配列をループ文で処理する場合は「foreach文」を使う
  • キーと配列の値は、foreach()で代入した変数を使って{}内でアクセスすることができる
  • 配列のキーが不要な場合はforeach( $array as $value ){のように省略することができる

こちらの記事は役に立ちましたか?

ありがとうございます。
もしよろしければ、あわせてフィードバックや要望などをご入力ください。

コメントありがとうございます!
運営の参考にさせていただきます。