ホーム > PHPの文法 > 6 制御文 > PHP foreach 文
PHPリファレンス

UPDATE:2018年11月06日

PHP foreach 文

php の foreach 文 制御文 | wepicks!
PHP4 PHP5 PHP7

1 Minute Note

  • foreach文 は配列をループ(反復)処理して現在の配列要素の キー や 値 を取得する
  • foreach文 の構文は2種類ある
    配列要素から 値 のみを取出す構文、キー と 値 の両方取出す構文

    //値のみ取得
    foreach (配列 as $value)
    	文
    //文が複数の場合「{ }(ブロック)」で括る
    foreach (配列 as $value) {
    	文
    	文
    }
    
    //キーと値の両方取得
    foreach (配列 as $key => $value)
    	文
    //文が複数の場合「{ }(ブロック)」で括る
    foreach (配列 as $key => $value) {
    	文
    	文
    }
    
  • foreach文 は配列やオブジェクトを扱う
    (他のデータ型を扱うとエラーが発生する)
  • foreach文 では キー や 値 の代入に 変数 を指定する
  • foreach文 を実行すると配列ポインタは自動的に先頭要素にリセットされる
  • foreach文 は変数への代入後、内部配列ポインタが1つ進む
  • ※文とはコードの記述単位の1つで、PHPの場合は「;(セミコロン)」で区切られるまでのコード


foreach文とは

POINT

  • foreach文は配列をループ(反復)処理して現在の配列要素の キー や 値 を取得する
  • foreach文の構文は2種類ある
    配列要素から 値 のみを取出す構文、キー と 値 の両方取出す構文

    //値のみ取得
    foreach (配列 as $value)
    	文
    //文が複数の場合「{ }(ブロック)」で括る
    foreach (配列 as $value) {
    	文
    	文
    }
    
    //キーと値の両方取得
    foreach (配列 as $key => $value)
    	文
    //文が複数の場合「{ }(ブロック)」で括る
    foreach (配列 as $key => $value) {
    	文
    	文
    }
    
  • foreach文は配列やオブジェクトを扱う
    (他のデータ型を扱うとエラーが発生する)
  • foreach文では キー や 値 の代入に 変数 を指定する
  • ※文とはコードの記述単位の1つで、PHPの場合は「;(セミコロン)」で区切られるまでのコード

foreach文は配列からデータを取り出すことが出来ます。データは配列の要素と言います。要素にはキーが含まれています。foreach文の構文は2種類あります。配列要素から のみを取り出す場合の構文と、キー と 値 の両方を取り出す場合の構文です。

foreach文を実行すると、ループ(反復)処理で1つずつ順番に配列要素である 値 や キー を取り出します。foreach文は配列型オブジェクト型に対して使用します。他のデータ型に使用するとエラーが発生してしまいます。データ型についてはこちらをご参照下さい。
また、foreach文では 配列要素から取り出す キー や 値 の代入に 変数 を指定します。指定した変数に キー や 値 が格納され、取得することが出来ます。

【配列の要素から 値 のみ取出す構文】

foreach (配列 as $value)
	文

//文が複数の場合「{ }(ブロック)」で括る
foreach (配列 as $value) {
	文
	文
	文
}

文とはコードの記述単位の1つで、PHPの場合は「;(セミコロン)」で区切られるまでのコードです。
文が複数の場合は「{ }(ブロック)」で括ります。if文などと同じです。

結果は

PHP
Python
Ruby

となります。

例では、「$ary」配列(配列型の変数)から配列要素である 値 を反復処理して取り出しています。反復は配列の要素数と同じ分だけ実行します。値 を代入する変数に「$value」を指定しています。文で「$value」を変数展開すると、配列要素の 値 を表示することが出来ます。

【配列の要素から キー と 値 の両方を取出す構文】

foreach (配列 as $key => $value)
	文

//文が複数の場合「{ }(ブロック)」で括る
foreach (配列 as $key => $value){
	文
	文
	文
}

結果は

idno : 001
name : 山田
mail : yamada@mydomain.com

となります。

例では、「$ary」配列(配列型の変数)から配列要素である キー と 値 を反復処理して取り出しています。反復は配列の要素数と同じ分だけ実行します。キー を代入する変数に「$key」を、値 を代入する変数に「$value」を指定しています。文で「$key」「$value」を変数展開すると、配列要素の キー と 値 を表示することが出来ます。


配列ポインタ

POINT

  • foreach文を実行すると配列ポインタは自動的に先頭要素にリセットされる
  • foreach文は変数への代入後、内部配列ポインタが1つ進む

配列ポインタとは、配列の中で現在どの要素を指しているのかを表すものです。配列には複数の要素を格納できるので、配列ポインタが現在どの要素を指しているのかということを考える必要があります。

【foreach文を実行すると配列ポインタは自動的に先頭要素にリセットされる】

foreach文を実行する場合は、配列ポインタは実行開始時に自動的に最初の配列要素に戻ります。reset()関数を使用すると指定した配列の配列ポインタが先頭要素を指すようリセットされますが、foreach文でも同じです。

【foreach文は変数への代入後、内部配列ポインタが1つ進む】

指定した配列をループ処理して変数現在の配列要素のキー や 値を代入していきます。代入されると内部配列ポインタ(現在の配列要素を指すポインタ)が1つ進みます。従って、次のループ処理では次の要素の値が変数に代入され、順番に要素を取出すことができます。

【配列ポインタの操作】

PHPには配列ポインタの位置を操作したり、現在の配列ポイントの値やキーを返す関数が幾つか用意されています。ここで、その関数を利用して配列ポイントについて理解してみましょう。

以下の例では、key() と current() を使用して現在の配列要素の キー と 値 を取得しています。
key()は、配列の現在のポインタ位置の要素の キー を返す関数です。
current()は、配列の現在のポインタ位置の要素の 値 を返す関数です。

結果は

キー:1
値:a

となります。

以下の例では、end() を使用して配列ポインタを最後の要素に移動しています。
end()は、配列の最後の要素にポインタを移動し要素の値を返す関数です。

結果は

キー:5
値:e

となります。

このように配列には現在の要素の位置を示す配列ポインタというものがあります。foreach文を実行すると配列ポインタは自動的に先頭要素にリセットされ、また、キー や 値 を変数へ代入した後、配列の内部ポインタが自動的に1つ進みます。従って、最初から順番に配列要素を取得することが出来ます。

以下の例ではend()で配列ポインタを最後に移動した後foreach文を実行しています。foreach文で配列ポインタはリセットされ最初に戻るので、最初から順番に配列要素の キー と 値 が取得されます。

結果は

キー:1
値:a
キー:2
値:b
キー:3
値:c
キー:4
値:d
キー:5
値:e

となります。


使用例

簡単なforeach文

配列から要素の 値 を取出します。

結果は

現在の配列要素の値は[ 1 ]です。
現在の配列要素の値は[ 2 ]です。
現在の配列要素の値は[ 3 ]です。
現在の配列要素の値は[ 4 ]です。
現在の配列要素の値は[ 5 ]です。

となります。

while文で表す。上記と等価です。

while文で配列から要素の 値 を取出す場合の例です。foreach文と等価として扱うことが出来ます。

結果は

現在の配列要素の値は[ 1 ]です。
現在の配列要素の値は[ 2 ]です。
現在の配列要素の値は[ 3 ]です。
現在の配列要素の値は[ 4 ]です。
現在の配列要素の値は[ 5 ]です。

となります。

配列要素を手動で指定する

配列から要素の 値 を取出す場合に、配列の キー を手動で指定します。例の場合は「$i」をインクリメント演算子で加算し、配列の キー に指定しています。この手法はインデックス配列(配列要素のキーが0から始まる整数)の場合に使用できます。

結果は

$array[0] => no1
$array[1] => no2
$array[2] => no3
$array[3] => no4
$array[4] => no5

となります。

配列のキーと値を取得する

配列から要素の キー と 値 を取得します。

結果は

現在の配列要素のキーは[ name ]で値は[ TRY PHP! ]です。
現在の配列要素のキーは[ url ]で値は[ https://wepicks.net ]です。
現在の配列要素のキーは[ mail ]で値は[ info@wepicks.net ]です。

となります。

多次元配列の場合はforeach文を入れ子にする

多次元配列の場合は、foreach文を入れ子(ネスト)にして配列要素を取得することが出来ます。

結果は


idno : 001
name : 鈴木
mail : suzuki@mydomain.com


idno : 002
name : 田中
mail : tanaka@mydomain.com


idno : 003
name : 山田
mail : yamada@mydomain.com


となります。


サンプルコード

– サンプル Click Here ! –

実行結果
簡単なforeach文
現在の配列要素の値は[ 1 ]です。
現在の配列要素の値は[ 2 ]です。
現在の配列要素の値は[ 3 ]です。
現在の配列要素の値は[ 4 ]です。
現在の配列要素の値は[ 5 ]です。

while文で表す。上記と等価
現在の配列要素の値は[ 1 ]です。
現在の配列要素の値は[ 2 ]です。
現在の配列要素の値は[ 3 ]です。
現在の配列要素の値は[ 4 ]です。
現在の配列要素の値は[ 5 ]です。

配列要素を手動で指定する
$array[0] => 1
$array[1] => 2
$array[2] => 3
$array[3] => 4
$array[4] => 5

配列のキーと値を取得する
現在の配列要素のキーは[ name ]で値は[ TRY PHP! ]です。
現在の配列要素のキーは[ url ]で値は[ https://wepicks.net ]です。
現在の配列要素のキーは[ mail ]で値は[ info@wepicks.net ]です。

多次元配列の場合はforeach文を入れ子にする
idno : 001
name : 鈴木
mail : suzuki@mydomain.com


idno : 002
name : 田中
mail : tanaka@mydomain.com


idno : 003
name : 山田
mail : yamada@mydomain.com

– サンプル Click Here ! –


タグ(=記事関連ワード)

日付

公開日:2011年11月6日
最終更新日:2018年11月06日

このカテゴリの他のページ

この記事へのコメント

トラックバックurl

https://wepicks.net/phpref-structures_foreach/trackback/

page top