假設我需要從CSV文件中的第50行到第100行的所有數據。 我想知道是否有更有效的方式循環遍歷每一行並檢查當前行是否在50到100之間? 現在我有一個簡單的代碼工作正常,但如果我想要一個範圍接近CSV文件的結尾,那麼它會變得有點慢。使用PHP獲取部分CSV文件的有效方法
$start = 200000;
$end = 200050;
$handle = fopen("test.csv", "r");
$i = 0;
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
if(($start <= $i) && ($i <= $end)) {
echo $data[0] . ' - ' . $data[1] . ' - ' . $data[2] . ' - ' . $data[3];
echo '<br />';
}
elseif($i > $end) {
break;
}
$i++;
}
fclose($handle);
有沒有辦法使用偏移量或類似的東西,所以我不必循環每一行?
更新: 該解決方案需要處理較大的文件。內存有限,因此將整個文件讀入內存將不起作用。
問題:一旦您加載了CSV數據,您打算如何處理這些CSV數據?我問,因爲加載CSV數據的最常見原因是將其保存到數據庫中。如果這就是你正在做的事情,並且你正在使用MySQL,那麼你可以使用'LOAD DATA INFILE'查詢來讓MySQL直接加載CSV數據,而不需要PHP來完成任何工作。這對你來說會少很多,而且執行速度會很快。 – Simba
基本上是CRUD操作。我必須使用CSV。在這種情況下數據庫不是一個選項。 – gtsongi
數據庫不是一個選項嗎?哇。甚至不是SQLite或NoSQL引擎之一?您希望這裏有多少數據,因爲即使您解決了內存問題,如果您不允許進行任何索引編制,您的性能也會非常糟糕。 – Simba