ウェブ、ショウジン

PHPでCSVデータを表示する

2009-11-23
Category
MySQL PHP

前に「PHPでCSVデータを読み込んで内容を出力する」でやってみたものよりも、もうちょっとましに出来たと思うので、あらためてまとめておく。

ファイル一覧

_include.php // 共通の処理
dic_top.php // 各行の用語一覧ぺーじへ飛ばすトップページ(あ行、か行という風に表示し、リンクが張られている)
list.php // 各行の用語を一覧表示(全レコード数中何件かも表示)
detail.php // 各用語の内容を表示
sample.csv // 表示する用語のCSVデータファイル

sample.csv

※よみがなでソートしたいので、よみがな要素は一番最初に。
かいきいわい,ka,快気祝,病気の全快を祝うこと。
がいろじゅ,ka,街路樹,道路に沿って植えつらねた樹木。
あいことば,a,合い言葉,味方同士であらかじめ決めてある合図の言葉。
あおうなばら,a,青海原,青々として広い海。
あおてんじょう,a,青天井,青空。青空を天井に見立てていう言葉。
かかし,ka,案山子,鳥獣をおどしてその被害を防ぐために田畑に立てた人型。

_include.php

<?php
// sample.csvをcsvdataとして定数に定義
define(csvdata, "sample.csv");

// 1行を1レコードとして配列に格納
$record = array();

// csvdataを変数$dataに代入
$data = file(csvdata);

// 要素数を上限としてforループで全要素をカンマ区切りで$recordに代入
for ($i = 0; $i < count($data); $i++) {
    $record[$i] = split(",", $data[$i]);
}

// 全レコード数を変数$sumに代入
$sum = count($record);

// よみがなであいうえお順にソートする
// 多次元配列なのでasortではなくarray_multisort()関数を使う
array_multisort($record);

// リンクURLに付加した行名を判別するためのパラメータgyo_nameの値を変数$gyo_nameに代入
$gyo_name = $_REQUEST['gyo_name'];

// 読み仮名と単語名と意味の値をパラメータに含ませる文字列部分を変数$link_paramに代入
$link_param = "?yomi=0&tango=2&imi=3";

// リンクURLのパラメ「gyo_name」の値によって「○行」と表示させるために変数に値を代入
if ($_REQUEST['gyo_name'] == 'a') {
    $gyo = "あ";
} elseif ($_REQUEST['gyo_name'] == 'ka') {
    $gyo = "か";
}

▼dic_top.php

<a href="list.php?gyo_name=a">あ行</a><br />
<a href="list.php?gyo_name=ka">か行</a><br />
</pre>

<strong>▼list.php</strong>
<pre lang="PHP">
<?php
include_once '_include.php';

echo "<h1>".$gyo."行の用語</h1>";

// forループで全要素にアクセスし
for ($i = 0; $i <= count($data); $i++) {
/* 前ページのリンクURLパラメータからひきついだ行名判断の値が「a」であり
なおかつ$recordの読み仮名要素の値が「a」のものだけを出力する
(同様に「か行」なら「ka」という風に、他の行名の条件判断も加える)
*/
    if ($record[$i][1] == 'a' && $gyo_name == 'a') {
        // $link_paramはリンクURLに付加するパラメータで_includeに記述してある
        // 特定のレコードにアクセスするためにリンクURLのパラメにid=$iも付加
        // リンク文字列は$recordの単語名(添え字2)を表示
        echo '<a href="detail.php'.$link_param.'&id='.$i.'">'.$record[$i][2].'</a>'."<br />";
        // 一回ループするごとに変数$jをインクリメントすることで条件に合ったレコードの件数を求める
        $j++;
    // か行を出力
    } elseif ($record[$i][1] == 'ka' && $gyo_name == 'ka') {
        echo '<a href="detail.php'.$link_param.'&id='.$i.'">'.$record[$i][2].'</a>'."<br />";
        $j++;
    }
}

// 全てのレコード数と条件に合って表示している件数を表示
echo $j."件"."(全".$sum."件中)";

detail.php

<?php
include_once '_include.php';

// $_REQUEST変数で渡された各要素の値をそれぞれ変数に代入
$id = $_REQUEST['id']; // idの値を$idに代入
$tango = $_REQUEST['tango']; // tangoの値を$tangoに代入
$yomi = $_REQUEST['yomi']; // yomiの値を$yomiに代入
$imi = $_REQUEST['imi']; // imiの値を$imiに代入

// 単語名、読み、意味を配列$recordから指定して出力
echo "単語名:".$record[$id][$tango]."<br />";
echo "読み:".$record[$id][$yomi]."<br />";
echo "意味:".$record[$id][$imi]."<br />";
基礎からのMySQL [基礎からのシリーズ] (プログラマの種シリーズ)
西沢 夢路
ソフトバンククリエイティブ
売り上げランキング: 3749

Categories

Tag Cloud

AdMob Android Apache centos CodeIgniter EC-CUBE facebookアプリ facebookページ feed Firefox Flash google googleanalytics htaccess iPad iPhone JavaScript lamp mobile nginx ogp pear php plugin rollover rss sendmail setting smarty ssh Titanium Mobile Titanium Studio tutorial ubuntu vim VirtualBox vmware vps Windows WordPress xampp youtube さくらインターネット アクセス解析 カスタム投稿