PHP解説 csvを読み込んで表で表示
PHPでcsvを読み込みたいな。それでね、表の形でブラウザに表示したいんだ。
PHPでcsvを読み込むためには「fgetcsv」という関数が使えます。
それでは、試してみましょうか。 読み込みに使うcsvをまず用意してください。
csvはエクセルで表を作って、名前を付けて保存のときにcsvを指定するとできるね。 作った!
【php_csv01.csv】
項番,名前,特徴 1,滾々川 いちじく,グレートガール 2,花ノ根 くるり,優しい
いちじくちゃんは「グレートガール」なんですね。。カッコいいですね。 それでは、このcsvをfgetcsv関数のサンプルを作ってみましょう。
【サンプルスクリプト】
<?php
//fopen関数により、指定したファイル(csv)を読み込みモードで開いて
//ファイルハンドル(今回は$f_handleとします)を指定する。
//開いたファイルの操作には、ファイル名ではなく、
//ファイル操作には、このファイルハンドルを指定してコードを記載する。
$f_handle = fopen('php_csv01.csv', 'r');
//テーブルの見出し項目のHTMLをechoで表示する。
echo '<table border="1">
<tr>
<th>項番</th>
<th>名前</th>
<th>特徴</th>
</tr>';
//fgetcsvでCSVファイルのデータを一行読み込み配列に入れ、
//テーブルの一行に表示させる処理を
//while文によりcsvのデータがある行分繰り返す。
while($yomikomi_csv = fgetcsv($f_handle)){
// テーブルに配列の値を格納。
echo '<tr>';
echo '<td>'.$yomikomi_csv[0].'</td>';
echo '<td>'.$yomikomi_csv[1].'</td>';
echo '<td>'.$yomikomi_csv[2].'</td>';
echo '</tr>';
}
// テーブルを閉じる。
echo '</table>';
// fopen関数により開いたファイルを閉じる。
fclose($f_handle);
?>
項番 | 名前 | 特徴 |
---|---|---|
O | ||
1 | X | O[gK[ |
2 | ԃm | D |
あれ?文字化けしっちゃったよ? くるりちゃん?どうゆうこと?
エクセルはshift-jisの文字コードで保存されてしまうのですが、phpの対応している文字コードがUTF-8なので、文字コードの違いで文字化けしてしまったのですね。
対策はいくつかありますが、一番シンプルなのはエクセルで名前を付けて保存の時に[CSV UTF-8(コンマ区切り)]を指定する方法です。 これはエクセルの2016以降で使用することができます。
いちじくの~エクセルは~2019!! GO!!
項番 | 名前 | 特徴 |
---|---|---|
項番 | 名前 | 特徴 |
1 | いちじく | グレートガール |
2 | くるり | 優しい |
3 | 文鳥 | バカ鳥(`A´) |
なんかしれっと小桜さんをディスってますね。。。
うーん、csvの一行目は見出し項目なので、表示しないでほしいな。
それでは、下のようにして、一行目をスキップしましょう。
【サンプルスクリプト】
<?php
//fopen関数により、指定したファイル(csv)を読み込みモードで開いて
//ファイルハンドル(今回は$f_handleとします)を指定する。
//開いたファイルの操作には、ファイル名ではなく、
//ファイル操作には、このファイルハンドルを指定してコードを記載する。
$f_handle = fopen('php_csv01.csv', 'r'); //csvの一行目(見出し行)を飛ばすためのカウンタ変数を宣言。 $midashi_skip= 0;
//テーブルの見出し項目のHTMLをechoで表示する。
echo '<table border="1">
<tr>
<th>項番</th>
<th>名前</th>
<th>特徴</th>
</tr>';
//fgetcsvでCSVファイルのデータを一行読み込み配列に入れ、
//テーブルの一行に表示させる処理を
//while文によりcsvのデータがある行分繰り返す。
while($yomikomi_csv = fgetcsv($f_handle)){ //一行目(見出し行)であったら、処理を一回スキップする。 if ($midashi_skip == 0) {
$midashi_skip++;
continue;
}
// テーブルに配列の値を格納。
echo '<tr>';
echo '<td>'.$yomikomi_csv[0].'</td>';
echo '<td>'.$yomikomi_csv[1].'</td>';
echo '<td>'.$yomikomi_csv[2].'</td>';
echo '</tr>';
}
// テーブルを閉じる。
echo '</table>';
// fopen関数により開いたファイルを閉じる。
fclose($f_handle);
?>
項番 | 名前 | 特徴 |
---|---|---|
1 | いちじく | グレートガール |
2 | くるり | 優しい |
3 | 文鳥 | バカ鳥(`A´) |
とりあえずはできましたね。 HTMLで表のコードを書くより、メンテナンスがしやすいので、いろいろな場面で活用できそうですね。
お名前