2012-03-20 84 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" 

我有很多記錄。我需要一次獲得一個記錄。假設我需要獲得id 8999的詳細信息。我的主要問題是是否有任何方法從CSV中獲取確切的數據記錄,就像我們在mysql表中查詢一樣。

除此之外,我在腦海中有以下解決方案來執行任務。最好的辦法是什麼?

  1. 閱讀CSV和加載到陣列。然後搜索並獲取數據。 (我必須得到所有記錄。次序是不同的,這就是爲什麼我面對這個問題。其他明智的,我可以記錄得到記錄。)
  2. 導出CSV到MySQL數據庫中,然後從該表中查詢
  3. 閱讀CSV所有無需將其加載到陣列的時間

如果我可以用快速方式在CSV文件中搜索,那將會很棒。感謝您的建議。

謝謝。

+0

可能重複的[如何提取從在PHP csv文件數據](http://stackoverflow.com/questions/2805427/how-to-extract-data-from-csv- file-in-php) – Gordon 2012-03-20 12:25:07

+0

如何解析(大)CSV文件之前已經被詢問和回答過多次。我會告訴你如何使用IF,所以我在這裏沒有看到任何真正的問題。 – Gordon 2012-03-20 12:25:41

+0

@戈登。我的問題不是如何從CSV文件中提取數據。我已經這樣做了。但是因爲我加載了5 MB的文件,總是得到一個記錄,我問的是有什麼辦法可以去確切的記錄,並得到它,而無需一直加載文件。 – 2012-03-20 12:27:50

回答

1

我不知道是否有任何庫允許您直接查詢CSV文件。如果有,那將是你最好的選擇。如果不是,這是另一種解決方案。

如果你想獲得id 8999的細節,那麼加載整個文件的效率會非常低。

你可以做這樣的事情

閱讀使用fgetsexplode上逗號線和檢查0個元素。如果它不是您想要的ID,請丟棄並重復。

+0

只是fgets和explode在這種情況下是比較鈍的工具 – Gordon 2012-03-20 12:32:50

+0

嗯,他可以使用'fgetcsv',但感覺這只是兩者的結合。 – xbonez 2012-03-20 12:43:26

+0

fgetcsv提供了對csv行的更好控制,因此更爲銳利 – Gordon 2012-03-20 12:44:42

0

不熟悉PHP,但是如果此查詢頻繁,請考慮將數據保存在內存中,並使用映射數據結構將其編入索引。 (也應在PHP陣列)

+0

PHP腳本僅適用於請求,因此您無法保留數據(除非使用共享內存段或信號量)。 – Gordon 2012-03-20 12:48:52