繰り返し - foreach文

「foreach文」で繰り返し

  • foreach文は、配列の全要素に対してループ処理を行いたい場合に使います
  • 構文には「基本形」と「拡張形」があり、書式は以下になります

// 基本形構文
foreach( 配列 as 要素の値を格納する変数 ){
 繰り返したい処理
}


// 拡張形構文
foreach( 配列 as 要素の添字を格納する変数 => 要素の値を格納する変数 ){
 繰り返したい処理
}

プログラムで書くと、以下のとおりとなります。

<?php
  // $dataに値を格納
  $data = array ( 15, 20, 35, 45, 50 );
  
  // <基本形>全配列要素の値を表示
  foreach ( $data as $value ) {
    echo $value . '<br>';
  }


拡張形で、配列の添字も取得できることを確認してみます。

<?php
  // $dataに値を格納
  $data = array ( 15, 20, 35, 45, 50 );
  
  // <拡張形>全配列要素の値を表示
  foreach ( $data as $key => $value ) {
    echo $key . '=>' . $value . '<br>';
  }


連想配列でも同様に、使用できます。

<?php
  // 連想配列変数$presentの宣言と初期化
  $present = array ( '長崎'=>'チャンポン', '名古屋'=>'手羽先', '沖縄'=>'泡盛' );
  
  // 基本形で、全配列要素の値を表示
  foreach ( $present as $value ) {
    echo $value . '<br>';
  }
  
  echo '<br>';
  
  // 拡張形で、全配列要素の値を表示
  foreach ( $present as $key => $value ) {
    echo $key . 'は、' . $value . 'が有名です。<br>';
  }
foreach文の使い方
  • 配列から要素を1つずつ取り出し、最後まで到達すると自動でループを終了する
  • 次の要素がある間は処理が続く

foreach (配列 as 仮変数) {
 …繰り返し実行する処理…
}

  • この場合、配列$dataの内容を変数$d にセットしながら、処理を繰り返しています
  • 要素を一時的に保存するための要素(この場合 $d)のことを仮変数と呼びます
  • 配列内容を順番に処理するような場合、for命令よりもforeach命令を使った方がコードがシンプルになります

foreach文の書き方(1)

  • 「$ar as $v」は、配列$arの要素を$vに1つずつ取り出すの意味
  • 先頭の要素、2番目の要素、3番目の要素と順番に処理されていきます
<?php
 $ar = array('東京', '千葉', '神奈川');

foreach ($ar as $v) {
	echo $v.'<br>';
}
?>

foreach文の書き方(2)

  • インデックスと値を関連付けた連想配列を処理する場合は、インデックスと値を別々に扱うことができます
  • インデックスと値は「=>」でつなぐ必要があります
  • 「$ar as $k => $v」と記述すると、配列$arのインデックスが$kに、値が$vに格納されます
<?php
  $ar = array('tky' => '東京', 'chb' => '千葉', 'kng' => '神奈川');

  foreach ($ar as $k => $v) {
    echo 'インデックス:' . $k . '名前:' . $v . '<br>';
  }


《実例》

<?php
$data = array ( '山田太郎', '横山花子', '田中一郎', '山本久美子', '鈴木次郎', '星山裕子', '佐藤勝男' );
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>名簿出力</title>
</head>
<body>
名簿には<?php echo ( count($data) ); ?>人が登録されています。
<ol>
<?php
foreach ( $data as $d ) {
  echo '<li>'.$d.'</li>' . "\n";
}
?>
</ol>
</body>
</html>

繰り返し構文の使い分け

  • ひとつの基準として、 foreach > for > while の順番に利用する
  • foreachが最も利用局面が限定された命令で、whileが最も汎用的な、その分処理によってはコードが冗長になりやすい

命令 使いどころ
while 繰り返しによって条件式の TRUE / FALSE が変化する場合
for 繰り返しの回数を具体的に指定できる場合
foreach 配列の内容を順番に処理したい場合