我有兩個文件,文件大約5MB,文件b大約66 MB。我需要找出是否有任何文件a中的行出現在文件b中,如果是,則將它們寫入文件c。stristr和速度
這是我目前處理它的方式:
ini_set("memory_limit","1000M");
set_time_limit(0);
$small_list=file("a.csv");
$big_list=file_get_contents("b.csv");
$new_list="c.csv";
$fh = fopen($new_list, 'a');
foreach($small_list as $one_line)
{
if(stristr($big_list, $one_line) != FALSE)
{
fwrite($fh, $one_line);
echo "record found: " . $one_line ."<br>";
}
}
的問題是它的運行方式(成功)了一個多小時和它也許3000線成較小的文件160,000。有任何想法嗎?
這有點高於我的頭,你知道一個很好的資源,我可以學習如何正確地做到這一點? – Mike 2010-09-08 05:09:13
爲您添加了一個示例。似乎工作正常,但我還沒有完全進行廣泛的調試。應該足以讓你看到發生了什麼事情,並且與原來相比,它將在少量空間中運行。 – Mike 2010-09-08 05:37:03
哇,它設法在45秒內完成整個65mb文件...非常感謝,你真的爲我節省了一個非常非常深的夜晚。另外自動地是我最喜歡的詞。 – Mike 2010-09-08 05:41:59