foreach
Home >> PHP言語リファレンス >> PHPの制御構造 >> foreach

foreach

foreach文

PHP4からforeach文がサポートされました。foreach文は配列用の反復処理文です。反復処理とは「○○の間、××の処理をする」という事でしたが、for文などの場合、配列のキーが飛び飛びの数値であったり文字列(連想配列)であった場合にはループ処理できません。

しかし、foreach文を使う事でそのような配列も簡単に反復処理ができるようになります。

基本の構文

指定した配列に関してループ処理を実行します。各ループ時には現在の要素の値が変数$valueに代入され、配列ポインタが1つ進められます。

このforeach文も複数の処理がある場合にはブロックを大括弧「{}」で括ります。

foreach文の実行開始時には配列ポインタが自動的に配列の先頭要素に戻ります。

使用方法:
foreach( 配列 as $value )
  
ループ処理;
サンプル:飛び飛びの数値添え字の配列
<?php
// 配列作成
$a = array(
  
1  => 100,
  
5  => 500,
  
10 => 1000
);

foreach(
$a as $value ){
  echo
$value."<br />\n"; // 改行しながら値を表示
}
?>

出力結果

100
500
1000

拡張構文

foreach文にはもう1つ、便利な拡張型があります。この場合は各ループでの現在の要素の値が変数$valに、要素のキーが変数$keyに代入されます。

使用方法:
foreach( 配列 as $key => $val )
  
ループ処理;
サンプル:連想配列
<?php
$fruit
= array(
  
"apple"  => "りんご",
  
"orange" => "オレンジ",
  
"pear"   => "なし"
);

foreach(
$fruit as $key => $value ){
  echo
$key. ":" .$value."<br />\n"; // 改行しながら値を表示
}
?>

出力結果

apple:りんご
orange:オレンジ
pear:なし

多次元配列の場合の構文

多次元配列をforeach文で扱う場合にはネスト(入れ子)します。

<?php
$food
= array(
  
"vegetable" => array(
      
"carrot"=> "にんじん",
      
"tomato" => "トマト",
      
"onion" => "たまねぎ"
  
), // カンマ , で区切る
  
"fruit" => array(
      
"apple" => "りんご",
      
"orange" => "オレンジ",
      
"grape" => "ぶどう"
  
)
);
// 文終了のセミコロン ;

foreach( $food as $key1 => $val1 ){
  echo
"--".$key1. "--<br />\n";

  foreach(
$val1 as $key2 => $val2 ){
    echo
$key2. ":" .$val2."<br />\n";
  }
}

?>

出力結果

--vegetable--
carrot:にんじん
tomato:トマト
onion:たまねぎ
--fruit--
apple:りんご
orange:オレンジ
grape:ぶどう