foreach

(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