繰り返し - 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 | 配列の内容を順番に処理したい場合 |