第6回目 アクセス集計
手順
以下の5項目を集計し、表示する。
- 日付別
- 時間別
- ブラウザの種類別
- OSの種類別
- IPアドレス別
CSV形式ファイルからのデータの読み取り
PHPの配列
Cなどの言語の配列は添え字に整数値を持ち、領域が連続しています。PHPの配列はハッシュを使ったもので領域が連続していません。このような配列を連想配列といいます。[1]
たとえば、Windows XPの個数を連想配列でカウントするときは次のように書きます。
$OS["Windows XP"]++;
この例のように添え字に文字列を利用できます。この添え字をキーといい、例のように"で囲んだ文字列や変数、関数も利用できます。
$OS[$key];
連想配列を参照する
連想配列を処理するときにはforeach()文を使います。
連想配列$OSの値だけを表示する。
foreach($OS as $value){ echo $value; }
連想配列$OSのキーと値の両方を表示する
foreach($OS as $key=>$value){ print "$keyは$value<br>"; }
テーブルで出力する
<table> <tr> <th>OS</th><th>件数</th> </tr> <?php foreach($OS as $key=>$value){ print "<tr>"; print "<td>$key</td>"; print "<td>$value</td>"; print "</tr>"; } </table>
文字列の切り出し
文字列$strのある位置xからl文字分の文字列を取り出すにはsubstr関数を使う。この関数の戻り値は文字列である。
$v = substr($str, x, l)
文字列は0から数え始めることに注意する。たとえば、文字列2004/12/01 15:35:00から日時と時間を取り出すときは次のようにする。
$hidike = substr($date, 5, 5); $ji = substr($date, 11, 2);
集計用プログラムの概要
// ファイルを読み取り専用でオープン $fp = fopen("info.dat", "r"); // データファイを1行ずつEOFまで読み込む while(list($date, $agent, $ipaddr) = fgetcsv($fp, 1024)){ // CSVファイルを読み込み、処理するプログラムを書く // 月日の切り出しと連想配列のインクリメント // 時間の切り出しと連想配列のインクリメント // ブラウザの判別と連想配列のインクリメント // OSの判別と連想配列のインクリメント } fclose($fp); // foreach分を使って連想配列の内容を表示する