2012-03-20 20 views
0

私は5 MB以上のCSVファイルを持っています。このような例として、PHP CSVファイルで検索

id,song,album,track 
200,"Best of 10","Best of 10","No where" 
230,"Best of 10","Best of 10","Love" 
4340,"Best of 10","Best of 10","Al Road" 

私はたくさんのレコードを持っています。私は一度に1つのレコードを取得する必要があります。私はID 8999の詳細を取得する必要があると仮定します。私の主な質問は、CSVから正確なデータレコードを取得する方法はありますか?

これ以外にも、次のような解決方法があります。何が最善の方法かもしれない。

  1. CSVを読み込んで配列に読み込みます。その後、それを検索してデータを取得します。 (私はすべてのレコードを取得する必要がありますが、これは私がこの問題に直面している理由とは異なります)その他012時間を配列に読み込まないでください

私はすばやくCSVファイルで検索することができます。あなたの提案を感謝します。

ありがとうございます。

+0

[PHPでCSVファイルからデータを抽出する方法](http://stackoverflow.com/questions/2805427/how-to-extract-data-from-csv- file-in-php) – Gordon

+0

(大)CSVファイルを解析する方法は以前に何度も尋ねられ、回答されています。私はどのようにIFを使用するかを知っているので、ここで実際の質問は表示されません。 – Gordon

+0

@Gordon。私の質問は、CSVファイルからデータを抽出する方法ではありません。私はすでにそれをしました。しかし、私は5 MBのファイルをロードするので、常に私は正確なレコードに移動し、常にファイルをロードせずにそれを得るためにはどのような方法を聞いている1つのレコードを取得します。 –

答えて

1

CSVファイルを直接照会できるライブラリがあるかどうかはわかりません。もしあれば、それはあなたの最善の策になるでしょう。そうでない場合、別の解決方法があります。

id 8999の詳細を知りたい場合は、ファイル全体を読み込むのが非常に効率的ではありません。

カンマでfgetsexplodeを用いたラインでこの

読むような何かを行うと0番目の要素をチェックすることができます。必要なIDでない場合は、破棄して繰り返します。

+0

ちょうどそのfgetsとexplodeは、この場合はかなり鈍いツールです。 – Gordon

+0

まあ、彼は 'fgetcsv'を使うことができますが、それはちょうど2つの組み合わせであると感じています。 – xbonez

+0

fgetcsvはcsv行をより良く制御できるため、よりシャープです – Gordon

0

PHPに詳しいわけではありませんが、このクエリが頻繁に行われる場合は、データをメモリに保存し、マッピングデータ構造を使用してIDでインデックス付けすることを検討してください。 (PHPでもArrayでなければならない)

+0

PHPスクリプトはリクエストのためだけに存在するため、共有メモリセグメントやセマフォを使用しない限り、データを保持することはできません。 – Gordon