2012-12-28 34 views
1

有很多CSV文件如下所示:a.csvb.csvaab.csv用php合併csv數據?

他們持有相同的列和頭。現在我想把所有的CSV數據放入whole.csv。只有一個標題。我該怎麼做?

a.csv數據:

header1 title post..... 

test who posand 

b.csv數據:

header1 title post..... 

head she pnow 

等.....

的whole.csv將包含所有的CSV數據。 如:

header1 title post..... 

head she pnow 
test who posand 

我嘗試以下code.but得不到我想:

$csvs = glob("*.csv"); 

foreach($csvs as $csv) { 
    $row = 1; 
    if (($handle = fopen($csv, "r")) !== FALSE) { 
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
     $fp = fopen("whole.csv", 'w'); 
     fputcsv($fp, $data); 
     $row++; 
    } 
    fclose($handle); 
    } 
} 

我已經把所有CSV文件在同一目錄。

回答

1

因爲你在寫模式下打開生成的csv文件,每個輸入csv文件:

$fp = fopen("whole.csv", 'w'); 

其擦拭whole.csv的內容!

您只需在循環外部打開whole.csv文件一次並繼續寫入。

$csvs = glob("*.csv"); 
$fp = fopen("whole.csv", 'w'); 

foreach($csvs as $csv) { 
    $row = 1; 
    if (($handle = fopen($csv, "r")) !== FALSE) { 
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
     fputcsv($fp, $data); 
     $row++; 
    } 
    fclose($handle); 
    } 
} 
+0

如何更改我的代碼?謝謝 – hehe

+0

代碼中是否存在一些錯誤。它顯示致命錯誤:超過30秒的最大執行時間我 – hehe

+0

我只測試它只有四個CSV文件。 – hehe

0

看一看file_put_contents

你會打開每個CSV文件,然後使用file_put_contents傳遞whole.csv$filename參數,文件句柄作爲$data參數,並使用FILE_APPEND標誌告訴它的內容附加,而不是覆蓋。