UPDATE:2018年11月06日
PHP foreach 文
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文とは
- 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文などと同じです。
例
1 2 3 4 5 6 | <!-- サンプルコード --> <?php $ary = array('PHP', 'Python', 'Ruby'); foreach ($ary as $value) echo "{$value}<br>\n"; ?> |
結果は
Python
Ruby
となります。
例では、「$ary」配列(配列型の変数)から配列要素である 値 を反復処理して取り出しています。反復は配列の要素数と同じ分だけ実行します。値 を代入する変数に「$value」を指定しています。文で「$value」を変数展開すると、配列要素の 値 を表示することが出来ます。
【配列の要素から キー と 値 の両方を取出す構文】
foreach (配列 as $key => $value) 文 //文が複数の場合「{ }(ブロック)」で括る foreach (配列 as $key => $value){ 文 文 文 }
例
1 2 3 4 5 6 | <!-- サンプルコード --> <?php $ary = array('idno' => '001', 'name' => '山田', 'mail' => 'yamada@mydomain.com'); foreach ($ary as $key => $value) echo "{$key} : {$value}<br>\n"; ?> |
結果は
name : 山田
mail : yamada@mydomain.com
となります。
例では、「$ary」配列(配列型の変数)から配列要素である キー と 値 を反復処理して取り出しています。反復は配列の要素数と同じ分だけ実行します。キー を代入する変数に「$key」を、値 を代入する変数に「$value」を指定しています。文で「$key」「$value」を変数展開すると、配列要素の キー と 値 を表示することが出来ます。
配列ポインタ
- foreach文を実行すると配列ポインタは自動的に先頭要素にリセットされる
- foreach文は変数への代入後、内部配列ポインタが1つ進む
配列ポインタとは、配列の中で現在どの要素を指しているのかを表すものです。配列には複数の要素を格納できるので、配列ポインタが現在どの要素を指しているのかということを考える必要があります。
【foreach文を実行すると配列ポインタは自動的に先頭要素にリセットされる】
foreach文を実行する場合は、配列ポインタは実行開始時に自動的に最初の配列要素に戻ります。reset()関数を使用すると指定した配列の配列ポインタが先頭要素を指すようリセットされますが、foreach文でも同じです。
【foreach文は変数への代入後、内部配列ポインタが1つ進む】
指定した配列をループ処理して変数に現在の配列要素のキー や 値を代入していきます。代入されると内部配列ポインタ(現在の配列要素を指すポインタ)が1つ進みます。従って、次のループ処理では次の要素の値が変数に代入され、順番に要素を取出すことができます。
【配列ポインタの操作】
PHPには配列ポインタの位置を操作したり、現在の配列ポイントの値やキーを返す関数が幾つか用意されています。ここで、その関数を利用して配列ポイントについて理解してみましょう。
以下の例では、key() と current() を使用して現在の配列要素の キー と 値 を取得しています。
key()は、配列の現在のポインタ位置の要素の キー を返す関数です。
current()は、配列の現在のポインタ位置の要素の 値 を返す関数です。
1 2 3 4 5 6 7 8 9 | <!-- サンプルコード --> <?php //配列 $ary = array(1 => 'a', 2 => 'b', 3 => 'c', 4 => 'd', 5 => 'e',); //現在 echo 'キー:'.key($ary)."<br>\n"; echo '値:'.current($ary)."<br>\n"; ?> |
結果は
値:a
となります。
以下の例では、end() を使用して配列ポインタを最後の要素に移動しています。
end()は、配列の最後の要素にポインタを移動し要素の値を返す関数です。
1 2 3 4 5 6 7 8 9 10 11 12 | <!-- サンプルコード --> <?php //配列 $ary = array(1 => 'a', 2 => 'b', 3 => 'c', 4 => 'd', 5 => 'e',); //ポインタを最後に移動 end($ary); //現在 echo 'キー:'.key($ary)."<br>\n"; echo '値:'.current($ary)."<br>\n"; ?> |
結果は
値:e
となります。
このように配列には現在の要素の位置を示す配列ポインタというものがあります。foreach文を実行すると配列ポインタは自動的に先頭要素にリセットされ、また、キー や 値 を変数へ代入した後、配列の内部ポインタが自動的に1つ進みます。従って、最初から順番に配列要素を取得することが出来ます。
以下の例ではend()で配列ポインタを最後に移動した後foreach文を実行しています。foreach文で配列ポインタはリセットされ最初に戻るので、最初から順番に配列要素の キー と 値 が取得されます。
1 2 3 4 5 6 7 8 9 10 11 12 | <!-- サンプルコード --> <?php //配列 $ary = array(1 => 'a', 2 => 'b', 3 => 'c', 4 => 'd', 5 => 'e',); //配列ポインタを最後へ移動 end($ary); //配列ポインタはリセットされ最初に戻る foreach ($ary as $key => $value) { echo 'キー:'.$key."<br>\n"; echo '値:'.$value."<br>\n"; } ?> |
結果は
値:a
キー:2
値:b
キー:3
値:c
キー:4
値:d
キー:5
値:e
となります。
使用例
簡単なforeach文
1 2 3 4 5 6 7 | <!-- サンプルコード --> <?php $array = array(1, 2, 3, 4, 5); foreach ($array as $value){ echo '現在の配列要素の値は[ '.$value.' ]です。'."<br>\n"; } ?> |
結果は
現在の配列要素の値は[ 2 ]です。
現在の配列要素の値は[ 3 ]です。
現在の配列要素の値は[ 4 ]です。
現在の配列要素の値は[ 5 ]です。
となります。
while文で表す。上記と等価です。
1 2 3 4 5 6 7 8 | <!-- サンプルコード --> <?php $array = array(1, 2, 3, 4, 5); reset($array);//配列ポインタを初期化して先頭要素に移動させる while (list(, $value) = each($array)) { echo '現在の配列要素の値は[ '.$value.' ]です。'."<br>\n"; } ?> |
結果は
現在の配列要素の値は[ 2 ]です。
現在の配列要素の値は[ 3 ]です。
現在の配列要素の値は[ 4 ]です。
現在の配列要素の値は[ 5 ]です。
となります。
配列要素を手動で指定する
1 2 3 4 5 6 7 8 9 | <!-- サンプルコード --> <?php $i = 0; $array = array('no1', 'no2', 'no3', 'no4', 'no5'); foreach ($array as $value) { echo "\$array[$i] => $value<br>\n"; $i++; } ?> |
結果は
$array[1] => no2
$array[2] => no3
$array[3] => no4
$array[4] => no5
となります。
配列のキーと値を取得する
1 2 3 4 5 6 7 8 9 10 11 | <!-- サンプルコード --> <?php $array = array( "name" => 'TRY PHP!', "url" => 'https://wepicks.net', "mail" => 'info@wepicks.net' ); foreach ($array as $key => $value) { echo '現在の配列要素のキーは[ '.$key.' ]で値は[ '.$value.' ]です。'."<br>\n"; } ?> |
結果は
現在の配列要素のキーは[ url ]で値は[ https://wepicks.net ]です。
現在の配列要素のキーは[ mail ]で値は[ info@wepicks.net ]です。
となります。
多次元配列の場合はforeach文を入れ子にする
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <!-- サンプルコード --> <?php $array = array(); $array[0]['idno'] = '001'; $array[0]['name'] = '鈴木'; $array[0]['mail'] = 'suzuki@mydomain.com'; $array[1]['idno'] = '002'; $array[1]['name'] = '田中'; $array[1]['mail'] = 'tanaka@mydomain.com'; $array[2]['idno'] = '003'; $array[2]['name'] = '山田'; $array[2]['mail'] = 'yamada@mydomain.com'; foreach ($array as $value1) { foreach ($value1 as $key2 => $value2){ echo "{$key2} : {$value2}<br>\n"; } echo "<hr/>\n"; } ?> |
結果は
idno : 001
name : 鈴木
mail : suzuki@mydomain.com
idno : 002
name : 田中
mail : tanaka@mydomain.com
idno : 003
name : 山田
mail : yamada@mydomain.com
となります。
サンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | <!-- サンプルコード --> <h3>簡単なforeach文</h3> <?php $array = array(1, 2, 3, 4, 5); foreach ($array as $value){ echo '現在の配列要素の値は[ '.$value.' ]です。'."<br>\n"; } ?> <h3>while文で表す。上記と等価</h3> <?php $array = array(1, 2, 3, 4, 5); reset($array);//配列ポインタを初期化して先頭要素に移動させる while (list(, $value) = each($array)) { echo '現在の配列要素の値は[ '.$value.' ]です。'."<br>\n"; } ?> <h3>配列要素を手動で指定する</h3> <?php $i = 0; $array = array(1, 2, 3, 4, 5); foreach ($array as $value) { echo "\$array[$i] => $value<br>\n"; $i++; } ?> <h3>配列のキーと値を取得する</h3> <?php $array = array( "name" => 'TRY PHP!', "url" => 'https://wepicks.net', "mail" => 'info@wepicks.net' ); foreach ($array as $key => $value) { echo '現在の配列要素のキーは[ '.$key.' ]で値は[ '.$value.' ]です。'."<br>\n"; } ?> <h3>多次元配列の場合はforeach文を入れ子にする</h3> <?php /* foreach の例4: 多次元配列 */ $array = array(); $array[0]['idno'] = '001'; $array[0]['name'] = '鈴木'; $array[0]['mail'] = 'suzuki@mydomain.com'; $array[1]['idno'] = '002'; $array[1]['name'] = '田中'; $array[1]['mail'] = 'tanaka@mydomain.com'; $array[2]['idno'] = '003'; $array[2]['name'] = '山田'; $array[2]['mail'] = 'yamada@mydomain.com'; foreach ($array as $value1) { foreach ($value1 as $key2 => $value2){ echo "{$key2} : {$value2}<br>\n"; } echo "<hr/>\n"; } ?> |
現在の配列要素の値は[ 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
タグ(=記事関連ワード)
日付
最終更新日:2018年11月06日