2013-06-22 29 views
-3

我試圖在PHP中將多個CSV文件合併在一起。我已經將它們合併爲使用PHP的整個文件,這要歸功於此處的線程(Combining 2 CSV files),但是我期望通過單獨的行合併文件。如何在PHP中逐行合併CSV文件

我想從CSV 1,線1從CSV 2讀取線1,等等,然後進行line 2, 3, etc. - 與每個環陣列中的文件之間的循環。我還沒有用PHP解析文件,所以我不知道從哪裏開始完成。

這就是我試圖完成,萬一上面不明確:

CSV1 - 1號線

CSV2 - 1號線

CSV3 - 1號線

CSV1 - 第2行

CSV2 - 第2行

CSV3 - 2號線

CSV1 - 3號線

CSV2 - 3號線

CSV3 - 3號線

....並不斷循環,直到沒有剩下線在CSV文件中。

+0

現在我使用的代碼從上面的線最好的答案。 –

+1

非常簡單:打開3個csv文件進行閱讀,並創建1個文字;依次從3個fgets()和(如果fgets返回一行)使用fputs將它寫入新文件;然後在完成時關閉所有文件 –

+0

@MarkBaker僅當OP實際上表示行而非行時。 CSV行可以包含換行符,在這種情況下'fgetcsv'和'fputcsv'會更合適。 – lafor

回答

2

試試這個PHP代碼(與file()得到線):

<?php 
$csv1 = file('csv1.csv', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); 
$csv2 = file('csv2.csv', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); 
$csv3 = file('csv3.csv', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); 
$lines = max(count($csv1), count($csv2), count($csv3)); 
$finalcsv = array(); 
for($i=0; $i<$lines; $i++) { 
    if(isset($csv1[$i])) $finalcsv[] = $csv1[$i]; 
    if(isset($csv2[$i])) $finalcsv[] = $csv2[$i]; 
    if(isset($csv3[$i])) $finalcsv[] = $csv3[$i]; 
} 

file_put_contents('final_data.csv', implode(PHP_EOL, $finalcsv));