• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:CSVでランキング作成)

初心者でもできる!CSVデータを使ったランキング作成の方法

このQ&Aのポイント
  • CSVファイルを使用してランキングを作成したい初心者のための方法を紹介します。GETで取得した値とCSVのB列を比較し、一致した場合にはC列にカウント数を書き込む処理を行います。
  • 初心者でも簡単にできる、CSVデータを使用したランキング作成の方法をご紹介します。GETで取得した値とCSVのB列を比較し、一致した場合にはC列にカウント数を書き込む処理を行います。
  • CSVデータを使ってランキングを作成したい初心者の方に向けて、簡単な方法をご紹介します。GETで取得した値とCSVのB列を比較し、一致した場合にはC列にカウント数を書き込む処理を行います。

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

  • ベストアンサー
回答No.2

補足ってメールで知らせてくれないので全然気づきませんでした、遅くなってごめんなさい。 さてfgetcsvを実行した時点で$csv[2]に第3フィールドの値が入ってるのは理解できますよね?ですからループの中で行うのはこれをインクリメントするだけです。 で、変更された値はcsvに書き出して初めて更新された事になるわけですが・・・csv、つまりテキストファイルですからその行だけ更新する事が出来ません。ですので、例えば$csvを2次元配列にするなどして各行の値を全て保持しておいて、ループ終了後に改めてファイルに書き出す、という処理が必要になってきます。または別にテンポラリファイルをオープンして、1行づつ読み出し処理をしつつ、テンポラリファイルに1行づつ書き出し、ループ終了後に元のファイルを上書き、という感じかな。 結構面倒なので僕はDBを使っちゃいます。なぜcsvを使わなければならないのかわかりませんが、ランキング処理自体はDBを使って行って、csvが必要な時にそれを作るって考え方もアリだと思いますよ。

その他の回答 (1)

回答No.1

CSVの行数にもよりますが、簡単に行うにはfgetcsv()という、1行ごとにCSVの内容を配列にしてくれる関数があるので、これを利用してCSV全体を配列に読み込んで、第2フィールドの値をGETの値とarray_search関数で検索し、一致すれば第3フィールドの値を更新してCSVに書き出す、という手順が一般的ですね。ただ、HTTPアクセスでファイルを使ったランキングなどをする場合は、同時にアクセスがあった時の事を考えてファイルロックなどをする必要がありますのでご注意を。

raumens
質問者

補足

fgetcsv()などを使って2フィールドの値を検索するまではできたのですが、検索できたら第3フィールドの値を更新するというところができません。 簡単に書いてみましたんで、どういう処理を書けばいいか教えてください。 ---------------------------- <?php $data = $_GET['data']; $fp = fopen ("test.csv","r+"); flock($fp, LOCK_EX); while($csv = fgetcsv ($fp, 1000, ",")) { if ($data == $csv[1]) { ここの処理がわかりません。 } } fclose ($fp); ?> ----------------------------------