我會給你一個解決方案,如果你有大的使用CVS並且你不想使用你機器的很多RAM(例如,假設每個CSV都是1GB)。
<?php
function joinFiles(array $files, $result) {
if(!is_array($files)) {
throw new Exception('`$files` must be an array');
}
$wH = fopen($result, "w+");
foreach($files as $file) {
$fh = fopen($file, "r");
while(!feof($fh)) {
fwrite($wH, fgets($fh));
}
fclose($fh);
unset($fh);
fwrite($wH, "\n"); //usually last line doesn't have a newline
}
fclose($wH);
unset($wH);
}
用法:
<?php
joinFiles(array('join1.csv', 'join2.csv'), 'join3.csv');
有趣的事實:
我只是用這個Concat的2個CSV文件〜每50萬線。它花了約5秒鐘,並使用512kb的內存。
邏輯:
打開每個文件,讀取一條線,然後將其寫入到輸出文件中。是的,寫每一行可能會比較慢,而不是寫一個完整的緩衝區,但是這樣可以在機器內存溫和的情況下使用繁重的文件。 在任何時候,您都是安全的,因爲腳本一次只能在線閱讀並寫入。
享受!
或者,如果您不再需要原始數據,則可以逐行讀取第二個csv並將其追加到第一個。完成後,刪除第二個csv並重命名第一個。 – Catalin 2011-03-24 10:42:37