Webサイト制作におけるPHPの基本(その6:foreach文、連想配列)
Webサイト制作において、PHPで名簿などを作る際に、配列と一緒に用いると便利なループ(繰り返し)構文「foreach文」についてまとめておく。
また、キーとなるデータに紐づけて複数の関連データを扱いたい場合に便利な「連想配列」についてもまとめておく。
foreach文
foreach文は、配列の処理に特化したループ構文で、配列内にあるデータの各々に対して、データが入っている順(インデックス番号順)に(同じ)処理を繰り返し適用(実行)していく。
処理の対象が配列で、配列内のすべてのデータに対して同じ処理を適用したい場合や、配列内のデータ順に処理を適用したい場合などに用いる。
書き方は下記の通り。
foreach(配列名 as 仮変数){ 配列内の各々のデータに順次適用(実行)していく処理 }
配列内のデータが順次仮変数に代入され、各データごとに処理を適用(実行)していく。
連想配列
連想配列とは、キー(⇒インデックスの役割)となるデータ群の各々に対して、(複数の)関連するデータ(値)を紐づけ、それら全体を1つのまとまりとして扱うことができる配列のこと。
連想配列の設定(作成)の仕方は下記の通り。
array(キー名1 => 値1, キー名2 => 値2, キー名3 => 値3,…)
※「キー名」や「値」が文字列の場合はそれぞれクォートでくくる必要がある
コード中で連想配列を用いる(参照する)際の書き方は下記の通り。
$連想配列名[キー名]
foreach文で連想配列を用いる際の書き方は下記の通り。
foreach($連想配列名 as キー用仮変数 => 値用仮変数){ 連想配列内の各々のデータに順次適用(実行)していく処理 }
連想配列と配列は組み合わせて使うことができ、入れ子にすることで多次元配列を作ることもできる。
また、foreach文などのループ構文とif文などを組み合わせた際に、条件に応じて処理をとばしたり、ループを抜けたりするのに便利なbreak文とcontinue文について簡単にまとめておく。
制御文 | 機能 |
---|---|
break | 処理中のループから抜ける |
continue | ループ(繰り返し)処理における現在の周回(continue文以降の処理)をとばして次の周回に進む |
※break文とcontinue文の後にはセミコロン「;」が必要
以下、確認コード。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>foreach文と連想配列</title> <style> h2 { font-size: 14px; } dt.one, dd.one { margin: 0; padding: 0; } dt.one { margin-left: 20px; width: 10px; float: left; } dd.one { padding-left: 40px; } dl { clear:both; } </style> </head> <body> <h2>ただの配列</h2> <ol> <?php $test1 = array('A','B','C'); foreach($test1 as $T){ print('<li>'.$T.'</li>'."\n"); } ?> </ol> <h2>連想配列</h2> <dl> <?php $test2 = array( 1 => 'A', 2 => 'B', 3 => 'C' ); foreach($test2 as $T => $S){ print('<dt class="one">'.$T.'</dt>'."\n"); print('<dd class="one">'.$S.'</dd>'."\n"); } ?> </dl> <h2>連想配列ネスト(入れ子)</h2> <dl> <?php $test3 = array( '商品A' => array('100', '2013/4', '3日'), '商品B' => array('200', '2013/5', '5日'), '商品C' => array('300', '2013/6', '7日'), '商品D' => array('400', '2013/7', '6日'), '商品E' => array('500', '2013/8', '4日'), '商品F' => array('600', '2013/9', '2日') ); foreach($test3 as $Item => $Spec){ print('<dt>'.$Item.'</dt>'."\n"); if($Item == '商品D'){ continue; } else { for($i=0; $i<count($Spec); $i++){ print('<dd>'.$Spec[$i].'</dd>'."\n"); } } if($Item == '商品E'){ print('商品Eの発売月は'.$Spec[1].'です。'); break; } } ?> </dl> </body> </html>