(PHP3 ではなく) PHP4 には、Perl や他の言語とよく似た foreach 構文があります。これにより 配列要素に関する反復処理が容易になります。この構造には、 2種類の構文があります。2番目の構文はあまり知られていませんが、 最初の構文の便利な拡張になっています。
1 2 foreach(array_expression as $value) statement 3 foreach(array_expression as $key => $value) statement 4 |
最初の形式は、array_expressionで指定した配列に 関してループ処理を行います。各ループにおいて現在の要素の値が $valueに代入され、内部配列ポインタが一つ前に 進められます。 (よって、次のループでは次の要素を見ることになります。)
2番目の形式も同様ですが、各ループで現在の要素のキーが変数 $keyに代入されるところが異なります。
foreachの実行開始時に内部配列ポインタは、 配列の先頭要素を指すように自動的にリセットされます。 このため、foreachループの前に reset()をコールする必要はありません。
既にご存知かと思いますが、以下の文は機能的に等価です。
1 2 reset( $arr ); 3 while( list( , $value ) = each( $arr ) ) { 4 echo "Value: $value<br>\n"; 5 } 6 7 foreach( $arr as $value ) { 8 echo "Value: $value<br>\n"; 9 } 10 |
1 2 reset( $arr ); 3 while( list( $key, $value ) = each( $arr ) ) { 4 echo "Key: $key; Value: $value<br>\n"; 5 } 6 7 foreach( $arr as $key => $value ) { 8 echo "Key: $key; Value: $value<br>\n"; 9 } 10 |
使用法を示すためにその他の例を示します。
1 2 /* foreach の例 1: 値のみ */ 3 $a = array(1, 2, 3, 17); 4 5 foreach($a as $v) { 6 print "Current value of \$a: $v.\n"; 7 } 8 9 /* foreach の例 2: 値 (説明用にキーを出力) */ 10 $a = array(1, 2, 3, 17); 11 12 $i = 0; /* for illustrative purposes only */ 13 14 foreach($a as $v) { 15 print "\$a[$i] => $k.\n"; 16 } 17 18 /* foreach の例 3: キーと値 */ 19 $a = array( 20 "one" => 1, 21 "two" => 2, 22 "three" => 3, 23 "seventeen" => 17 24 ); 25 26 foreach($a as $k => $v) { 27 print "\$a[$k] => $v.\n"; 28 } 29 |