- ベストアンサー
PHPにてCSVから配列で表を作成
どうもお世話になります。 現在PHPの練習をしているんですが、 どうしてもわからないことがあります。 (初めて3日の初心者ですので、訳わからないことをいっていたらすみません) ●CSVからファイルオープンして、 ●データを配列変数に入れて、 ●変数分だけ表として作成 したいんです。 ところが、 ●列が3列になったら、次の行に移る ●変数を全部入れたらテーブル作成を完了する。 ということができません。(↓こんな感じ。HTMLの表のつもり) 行1 [$name][$name][$name] 行2 [$name][$name][$name] 行3 [$name][$name][$name] わかりにくい説明ですみませんが、 よろしくお願いいたします。 ちなみにPHP4.3.1です。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じでしょうか?お試しください。 <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>
その他の回答 (4)
- arisa5
- ベストアンサー率54% (6/11)
>日本語でやったら 文字化けをするんですが それでしたら、2行目の <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> のcharset=EUC-JP を charset=Shift_JIS に変えて実行してみて下さい。
お礼
できました! すべての疑問が解決しました! 助かりました、本当にありがとうございます!! 親切にいろいろ教えていただきarisa5さんにはとても感謝しております。 ほんとうにありがとうございました! |(_ _)|
- arisa5
- ベストアンサー率54% (6/11)
CSVのデータの入力形式はどうなっていますか? name,name,name,name…と、3列以上並んでますか? こちらでももう一度検証してみます。
補足
すみません、こちらでもう一度検証してみたところ、できました!本当にありがとうございます!! ついでといってはあつかましいのですが、 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)
雑なコーディングですが、どうでしょう? <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>
補足
長いコーディングありがとうございます! 返事が遅くなって申し訳ありません。 書いていただいたコーディングを検証していたもので。 こちらのミスですと大変申し訳ないんですが、 やってみたところ、 [$name] [$name] [$name] [$name] [$name] [$name] [$name] のような結果になってしまいました。 [$name][$name][$name] [$name][$name][$name] [$name] のようには横並びにして3列になったら 次の列に行くにはどうしたらいいんでしょう? こちらの勘違いでしたら 申し訳ありません。
- GuruGuru22
- ベストアンサー率51% (177/346)
こんにちは。 fgetcsv関数使ったらどうでしょう。
お礼
御回答ありがとうございます。 関数をつかってCSVから変数にするところまではできたんです。 でも、そのあと、表とうまくからめることができなくて・・・
お礼
何度もありがとうございます! できました!いやーありがとうございます。 ほんと感謝です! ちなみにこれを日本語でやったら 文字化けをするんですが何かあるんでしょうか? ほんと何度もすみません・・。