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>
Webサイト制作におけるPHPの基本(その5:配列、count関数)
Webサイト制作において、PHPで名簿などを作成する際に必要となる配列についてまとめておく。
配列
配列とは、関連する複数のデータを一つのまとまりとして扱えるようにしたもの。
通常の変数では、1つの変数に1つのデータ(値)しか入れられなかったが、配列というのは一緒に複数のデータ(値)をもつことができる。
配列の設定(作成)の仕方は下記の通り。
$配列名 = array(データ1,データ2,データ3,・・・);
また、コードで配列を用いる際には下記のような書き方となる。
$配列名[データの順番(データ数)]
[]内のデータの順番のことを「インデックス番号」または「添え字」と呼び、配列内に入れられているデータの番号(順番)を表している。
「インデックス番号」は1ではなく、0から始める点に注意が必要。
さらに、「インデックス番号」を指定して新しいデータを代入することで、その「インデックス番号」のデータを上書きすることができる。
また、「インデックス番号」を指定せずにデータを追加した場合は、その時点で配列内に存在しているデータの一番最後に追加される。
count関数
count関数は、配列内にあるデータの個数を調べる関数。
書き方は下記の通り。
count($配列名)
以下、確認コード。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>配列、count関数</title> <style> p.test { background: #ccc; } </style> </head> <body> <h2>参加者一覧</h2> <?php $data = array('相田さん','飯田さん','石田さん','岩田さん','牛田さん'); $data[2]='斉田さん'; $data[]='坂田さん'; $data[1]=''; print('<p class="test">'.$data[0].'</p>')."\n"; print('<p class="test">'.$data[1].'</p>')."\n"; print('<p class="test">'.$data[2].'</p>')."\n"; ?> <ol> <?php for($i = 0; $i < count($data); $i++){ print('<li>'.$data[$i].'</li>')."\n"; } ?> </ol> <p>参加者は<?php print(count($data)); ?>人です。</p> </body> </html>
ちなみに、配列の「インデックス番号」を飛ばして指定した場合は処理が正しくされないようである。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>配列、count関数</title> <style> p.test { background: #ccc; } </style> </head> <body> <h2>参加者一覧</h2> <?php $data = array('相田さん','飯田さん','石田さん','岩田さん','牛田さん'); $data[2]='斉田さん'; $data[]='坂田さん'; $data[1]=''; $data[10]='志田さん'; //インデックス番号を飛ばして指定 print('<p class="test">'.$data[0].'</p>')."\n"; print('<p class="test">'.$data[1].'</p>')."\n"; print('<p class="test">'.$data[2].'</p>')."\n"; ?> <ol> <?php for($i = 0; $i < count($data); $i++){ print('<li>'.$data[$i].'</li>')."\n"; } ?> </ol> <p>参加者は<?php print(count($data)); ?>人です。</p> </body> </html>
Webサイト制作におけるPHPの基本(その4:エスケープシーケンス)
Webサイト制作でのPHPのコーディングにおいて、ソース中の改行を意味する「\n」(\n)などの特別な意味(役割)を持った文字とクォート(シングルorダブル)との関係は、意図した結果を得るために、しっかり理解して、使い分けられるようになっておく必要がある。
既に過去の記事で少し触れているが、エスケープシーケンスとクォートとの関係についてまとめておく。
エスケープシーケンス
ソース中の改行などの役割を持った「\n」などの「\ + 特定の文字」で1文字と扱う文字をエスケープシーケンスと呼ぶ。
以下、主なエスケープシーケンス。
エスケープシーケンス | 意味(役割)、呼び方 |
---|---|
\n | 改行(ラインフィード) |
\r | 復帰(キャリッジリターン) |
\t | タブ |
\$ | ドル記号 |
\\ | 「\」の文字 または バックスラッシュ |
\" | ダブルクォート |
\' | シングルクォート |
これらはシングルクォート内ではただの文字列として処理されるが、ダブルクォート内ではその役割(をもったもの)として処理される。
ただし、「\\」と「\'」は例外で、「\\」についてはシングルクォート内でもその役割として処理される。「\'」については特に注意が必要。下記の表示結果参照。
以下、確認コード。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>エスケープシーケンスとクォート</title> </head> <body> <?php print( '「\」テスト1のシングル<br>')."\n"; print( "「\」テスト1のダブル<br>")."\n"; print( '「\\」テスト2のシングル<br>')."\n"; print( "「\\」テスト2のダブル<br>")."\n"; print( '「\\\」テスト3のシングル<br>')."\n"; print( "「\\\」テスト3のダブル<br>")."\n"; print( '「\n」テスト4のシングル<br>')."\n"; print( "「\n」テスト4のダブル<br>")."\n"; print( '「\\n」テスト5のシングル<br>')."\n"; print( "「\\n」テスト5のダブル<br>")."\n"; print( '「\\\n」テスト6のシングル<br>')."\n"; print( "「\\\n」テスト6のダブル<br>")."\n"; print( '「\'」テスト7のシングル<br>')."\n"; print( "「\'」テスト7のダブル<br>")."\n"; // print( '「\\'」テスト8のシングル<br>')."\n"; この書き方はエラーになる print( "「\\'」テスト8のダブル<br>")."\n"; ?> </body> </html>
Webサイト制作におけるPHPの基本(その3:htmlspecialchars関数と特殊文字)
Webサイト制作において、フォームなどでユーザーからの入力を受けとる際に用いられるhtmlspecialchars関数と、その際に必要となる特殊文字の扱いについてまとめておく。
htmlspecialchars関数
HTMLには特殊な意味(役割)を持っている文字(特殊文字)があり、その文字をHTMLでの意味(役割)としてではなく、ただの文字(見た目は記号)として表示する(させる)ために文字参照値(という言い方が正しいかどうかは分からないが)に置き換える機能を持つ関数。
フォームなどでユーザー(他者)からの悪意ある入力を無害化するのに用いられ、安全性を高めるためにも指定しておくことが望ましい。
書き方は以下の通り。
htmlspecialchars('文字列',エスケープの種類,'文字コード')
上記のような置き換えの機能を「HTMLエスケープ」と呼び、htmlspecialcharsの括弧内で、その種類(方法)を指定する。これらは文字列ではなく定数扱いになるためクォートで囲む必要はない(囲んではいけない)。
いくつか種類があるようだが、とりあえず以下の3つをメモしておく。
エスケープの種類(方法) | 概要 |
---|---|
ENT_COMPAT | ダブルクォートは置き換えるが、シングルクォートは置き換えない |
ENT_QUOTES | シングルクォートとダブルクォートの両方を置き換える |
ENT_NOQUOTES | シングルクォートとダブルクォートの両方を置き換えない |
※参照http://php.net/manual/ja/function.htmlspecialchars.php
以下、確認コード。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>htmlspecialchars確認</title> </head> <body> <?php print (htmlspecialchars(' "ダブル" ',ENT_COMPAT,'UTF-8').'<br>')."\n"; print (htmlspecialchars(" 'シングル' ",ENT_COMPAT,'UTF-8').'<br>')."\n"; print (htmlspecialchars(' "ダブル" ',ENT_QUOTES,'UTF-8').'<br>')."\n"; print (htmlspecialchars(" 'シングル' ",ENT_QUOTES,'UTF-8').'<br>')."\n"; print (htmlspecialchars(' "ダブル" ',ENT_NOQUOTES,'UTF-8').'<br>')."\n"; print (htmlspecialchars(" 'シングル' ",ENT_NOQUOTES,'UTF-8').'<br>')."\n"; ?> </body> </html>
Webサイト制作におけるPHPの基本(その2:変数、定数、データ型)
Webサイト制作におけるPHPの演算で、同じ値を使い回したりする際に必要となる変数、定数、データ型についてまとめておく。
基本概念
- 変数:代入した値を一時的に保持し、変更ができる
- 定数:宣言時に代入(セット)した値を保持し、変更ができない
- データ型:文字列や数値、真偽値などのデータの種類
変数名の原則
変数に名前を付けるにあたって、以下の原則を守ること。
- 変数名のはじめに「$」をつける
- 変数名の先頭は英字orアンダースコア「_」であること ※数字は不可
- 変数名の2文字目以降は英数字orアンダースコア「_」であること
- 変数名の大文字/小文字は区別される
また、変数名を付ける際に考慮すべきこととして、以下のことがあげられる。
- 変数が表す内容を理解しやすい名前にする
- 無駄に長すぎず、省略しすぎない程度のものにする
- 後で混同したりしないように、似たような名前は付けない
- 基本的にはローマ字表記ではなく、英単語を用いるようにする
- 記法を統一する
(主な)記法 | 概要 | 例 |
---|---|---|
キャメルケース記法 | 先頭の文字を小文字にして、以降の単語の区切りを大文字にする | $myValue |
アンダースコア記法 | すべての文字を小文字にして、単語の区切りをアンダースコアにする | $my_value |
Pascal記法 | すべての単語の区切り(先頭の文字)を大文字にする | $MyValue |
Webサイト制作におけるPHPの基本(その1)
Webサイト制作において、ショッピングカートなどのWebアプリを制作する必要が出てくる場合がある。
その際に用いられているPHPの基本についてまとめていく。
PHPのコード記述時のルール
- コードは「<?php」と「?>」の間に記述する
- 文字列はシングルクォートで囲む(ことにする)
- 命令文の末尾にはセミコロンをつける
- キーワードは半角の空白で区切る
- 大文字と小文字は区別しない(ミスを防止するため小文字で統一する)
- 誰が見ても分かるように、コメントアウト(1行なら「//」、複数行なら「/* */」を用いてコード(処理)の概要を記しておく
※ファイルの内容がphpコードのみ(HTMLが混在しない)の場合、後の処理に余計な影響を与えることがあるので、終わりを示す「?>」は記述しない
print命令
print:文字列を出力する命令。
※「print」は関数ではないため、厳密には引数を括弧でくくる必要はない
以下、確認コード。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>print命令</title> </head> <body> <?php print('こんにちは<br>'); print'こんにちは'; ?> </body> </html>
改行(コード)の区別
改行といっても、表示(出力)結果での改行とソースコード中での改行の意味があり、それぞれ記述方法が異なるので混同しないように注意する。
- 表示(出力)結果で改行をさせたい場合⇒brタグ
- ソースコード中で改行させたい場合⇒「\n(バックスラッシュエヌ)」
カメレオンの手(バイオリウム)
以前、とある散歩番組で放送されていたのを見て、一度行ってみたいなぁと思っていた「バイオリウム」。
植物の写真が撮りたかったのと、放し飼いにされているというグリーンイグアナを見るべく行ってきました。
バイオリウムは、渋谷駅からバスで20〜30分ほどで最寄りのバス停に着き、そこから歩いて1〜2分のところにありました。
入場無料なので、さっそく中へ。
入口付近は売店になっており、野菜や植物、グッズなどが売られていました。
入ってすぐのところで、最初の生き物「ケヅメリクガメ」の登場です。
残念ながら私がいた間は、囲いの中でずっと爆睡されていたようでしたが、1mくらいの大きさで、イカツイ手の持ち主でした。
道なりを進むと、サボテンなどの中南米の植物ゾーンを抜けた先に、見たことのある姿が存在感を放っています。
出ました「ラフレシア」。
世界最大の花にして、臭い!ということで有名なこの花。
いざ!
と前に立って見ると、なんとただの模型でした…。
そりゃそうだよな。なんてったって臭いんだから。
と一人むなしく納得して、先へ進みます。
続きを読む