- ベストアンサー
phpでCSVデータを読み書き後表表示させる方法
- PHP初心者の方がCSVデータを読み書きし、ブラウザに表形式で表示したいです。
- PHPバージョン5.3.1とXAMPPバージョン2.5.8を使用しています。
- Access2007で出力したCSVファイルを加工して表示したいのですが、うまく進めることができません。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
提示のcsvデータの仕様が変、転記ミスだと思います。 たとえばこんな感じでやるといいです。 (なお、スタイル設定はスタイルシートを分けた方が効率的) <style> thead th{ background-color : lime; } tbody td{ background-color : yellow; } </style> <? $filename="x.csv"; $handle = fopen($filename, "r"); $headflg=true; $count=0; $thead=""; $tbody=""; while (($row = fgetcsv($handle,1024, ",")) !== FALSE) { if($count===0){ $thead="<tr>\n"; foreach($row as $val){ $val=htmlspecialchars($val); if($val==="") $val=" "; //空欄の整形 if(preg_match("|\d{4}/\d{2}/\d{2}|",$val)) $val=date("n/j",strtotime($val)); //日付の整形 if($val==="実績テーブル集計(移動出入仕入売上)のクロス集計_sort") $val="区分"; //特定文字の整形 $thead.="<th>{$val}</th>\n"; } $thead.="</tr>\n"; }else{ $tbody.="<tr>\n"; foreach($row as $val){ $val=htmlspecialchars($val); if($val==="") $val=" "; //空欄の整形 if(preg_match("/^(\d+?)\.00$/",$val,$match)) $val=$match[1]; //数値の整形 $tbody.="<td>{$val}</td>\n"; } $tbody.="</tr>\n"; } $count++; } fclose($handle); $table=""; $table.="<table>\n"; $table.="<thead>\n".$thead."</thead>\n"; $table.="<tbody>\n".$tbody."</tbody>\n"; $table.="</table>\n"; print $table; ?>
その他の回答 (2)
- kool_noah
- ベストアンサー率33% (95/285)
//$filename変数にどのファイルかを割り当てる。 $filename = "c:\\xampp\\htdocs\\hi.csv"; $handle = fopen($filename,"r"); echo "<table cellpadding='4' cellspacing='1' border='1'>"; while ($array = fgetcsv($handle)) { echo '<tr>'; foreach ($array as $key => $val){ $val = mb_convert_encoding($val, "utf-8","shift-jis"); $val = str_replace("実績テーブル集計(移動出入仕入売上)のクロス集計_sort", "区分", $val); if ($val == "") echo '<td> </td>'; echo '<td>' . $val . '</td>'; } echo '</tr>'; } fclose( $handle );
お礼
すべてスクリプトを書いて頂きありがとうございました。 早速試したところ、当初目的としていた部分はクリア致しました。お世話になりましたー。
- bm_hiro
- ベストアンサー率51% (200/388)
何も考えていない俺が、このソースを読んで、実証もせずに感じた違和感を書き出してみます。 ----- この三行 は $handle = fopen($filename,"r"); $contents = fread($handle, filesize($filename)); fclose($handle); ↓でいいんじゃなかろうか・・・? $contents = file_get_contents($filename); ----- $contents の中身って CSVファイルを 文字列に入れてるだけなので、$line = explode(",", $fp); したら おかしな事になるんじゃ・・・? 例えば、一行に5項目あるカンマ区切りが3行あるとしたら、$lineの中身は 15個の一次元配列になる。(各改行の手前はカンマで終わってるものとして) ---- で 更に $data = split("\t", $line[$a]); で タブ区切り??? タブは どこから出てきたのか・・・? ---- 俺の中の脳内実行の結果、これって縦に だーーーーっと並んだだけの表になってません?
お礼
御指摘ありがとうございます。 私も脳内実行が出来ればいいのですが・・今はひとつひとつ、こうするとこのような結果になるな・・と確かめている状態です。 おっしゃる通りの結果になりました。 どうしてそうなるのかわからなったのですが、なんとなく理解出来ました。 独学で学んでいるのでよくわからないまま、いきずまってしまったところでした。
お礼
ありがとうございました!! 早速、スクリプトをコピーして実行したところ出来ました。 csvはコピペしたものはデータが多すぎてたので適当に削った為おかしく表示されてしまってました。すみません・・。 スタイルシートを使うことは全く思いつきませんでした。 丁寧に教えて頂きましてありがとうございました。