• ベストアンサー

PHPにてCSVから配列で表を作成

どうもお世話になります。 現在PHPの練習をしているんですが、 どうしてもわからないことがあります。 (初めて3日の初心者ですので、訳わからないことをいっていたらすみません) ●CSVからファイルオープンして、 ●データを配列変数に入れて、 ●変数分だけ表として作成 したいんです。 ところが、 ●列が3列になったら、次の行に移る ●変数を全部入れたらテーブル作成を完了する。 ということができません。(↓こんな感じ。HTMLの表のつもり) 行1 [$name][$name][$name] 行2 [$name][$name][$name] 行3 [$name][$name][$name] わかりにくい説明ですみませんが、 よろしくお願いいたします。 ちなみにPHP4.3.1です。

質問者が選んだベストアンサー

  • ベストアンサー
  • arisa5
  • ベストアンサー率54% (6/11)
回答No.4

こんな感じでしょうか?お試しください。 <html><head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> </head> <table border=1 cellspacing=1 cellpadding=1> <? $fp = @fopen("test.csv","r"); if ($fp == null) { print ("can't open"); exit; } $cnt = 0; while (!feof($fp)) { $record[$cnt] = fgets($fp, 2000); $cnt += 1; } $retu = 1; for ($i=0; $i<$cnt; $i++) { $str = explode(",", $record[$i]); if ($retu == 1) { print("<tr>"); } print("<td>$str[0]</td>"); $retu += 1; if ($retu > 3) { print("</tr>"); $retu = 1; } } if ($retu != 1) { print("</tr>"); } fclose($fp); ?> </table> </body></html>

nudy
質問者

お礼

何度もありがとうございます! できました!いやーありがとうございます。 ほんと感謝です! ちなみにこれを日本語でやったら 文字化けをするんですが何かあるんでしょうか? ほんと何度もすみません・・。

その他の回答 (4)

  • arisa5
  • ベストアンサー率54% (6/11)
回答No.5

>日本語でやったら 文字化けをするんですが それでしたら、2行目の <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> のcharset=EUC-JP を charset=Shift_JIS に変えて実行してみて下さい。

nudy
質問者

お礼

できました! すべての疑問が解決しました! 助かりました、本当にありがとうございます!! 親切にいろいろ教えていただきarisa5さんにはとても感謝しております。 ほんとうにありがとうございました! |(_ _)|

  • arisa5
  • ベストアンサー率54% (6/11)
回答No.3

CSVのデータの入力形式はどうなっていますか? name,name,name,name…と、3列以上並んでますか? こちらでももう一度検証してみます。

nudy
質問者

補足

すみません、こちらでもう一度検証してみたところ、できました!本当にありがとうございます!! ついでといってはあつかましいのですが、 CSVの一行の最初だけを並べるというのはできますでしょうか? たとえば・・・ [$name][$age][$sex][$address] [$name][$age][$sex][$address] [$name][$age][$sex][$address] [$name][$age][$sex][$address] [$name][$age][$sex][$address] とCSVでは、レコード単位で並んでいて、 そのトップの変数だけを今までどおり並べる というものです。 [$name][$name][$name] [$name][$name] 次から次へとすみませんが、 もしよろしければお願いいたします。 毎回とても参考になります。 ありがとうございます!

  • arisa5
  • ベストアンサー率54% (6/11)
回答No.2

雑なコーディングですが、どうでしょう? <html><head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> </head> <table border=1 cellspacing=1 cellpadding=1> <? $fp = @fopen("test.csv","r"); if ($fp == null) { print ("can't open"); exit; } $cnt = 0; while (!feof($fp)) { $record[$cnt] = fgets($fp, 2000); $cnt += 1; } for ($i=0; $i<$cnt; $i++) { $str = explode(",", $record[$i]); $kazu = sizeof($str); $retu = 1; for ($j=0; $j<$kazu; $j++) { if ($retu == 1) { print("<tr>"); } if ($retu > 3) { print("</tr>"); $retu = 1; } print("<td>$str[$j]</td>"); $retu += 1; } print("</tr>"); } fclose($fp); ?> </table> </body></html>

nudy
質問者

補足

長いコーディングありがとうございます! 返事が遅くなって申し訳ありません。 書いていただいたコーディングを検証していたもので。 こちらのミスですと大変申し訳ないんですが、 やってみたところ、 [$name] [$name] [$name] [$name] [$name] [$name] [$name] のような結果になってしまいました。 [$name][$name][$name] [$name][$name][$name] [$name] のようには横並びにして3列になったら 次の列に行くにはどうしたらいいんでしょう? こちらの勘違いでしたら 申し訳ありません。

回答No.1

こんにちは。 fgetcsv関数使ったらどうでしょう。

参考URL:
http://search.net-newbie.com/php/function.fgetcsv.html
nudy
質問者

お礼

御回答ありがとうございます。 関数をつかってCSVから変数にするところまではできたんです。 でも、そのあと、表とうまくからめることができなくて・・・

関連するQ&A