2017-07-19 39 views
2

我有2個csv文件,我需要合併。php/merge 2.csv文件到一個

file1.csv:

col1,col2,col3,col4 
val1,val2,val3,val4 

file2.csv:

col2,col4,col5 
val22,val42,val5 

我需要合併這兩個文件,並創建第三個文件與本次內容:

col1,col2,col3,col4,col5 
val1,val2,val3,val4,val5 
val1,val22,val3,val42,val5 

這裏是我的嘗試,但結果是錯誤的:

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

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

這裏是代碼結果,但它不是我所需要

col1,col2,col3,col4 
col2,col4,col5 
val1,val2,val3,val4 
val22,val42,val5 
+0

你能顯示它產生的結果? –

回答

0

獲取CSV標題欄,並把它們作爲指標值:

$csv1Headers = explode(',', $csv1[0]); 
$csv2Headers = explode(',', $csv2[0]); 
$mergedHeaders = array_unique(array_merge($csv1Headers, $csv2Headers)); 

$lines = max(count($csv1), count($csv2)); 
$finalcsv = array(implode(',', $mergedHeaders)); 
for ($i = 1; $i < $lines; $i++) { 
    if (isset($csv1[$i])) { 
     // combine arrays, use an array of nulls to maintain order. 
     $finalcsv[] = implode(',', array_merge(
       array_combine($mergedHeaders, array_fill(0, count($mergedHeaders), null)), 
       array_combine($csv2Headers, explode(',', $csv2[$i])), 
       array_combine($csv1Headers, explode(',', $csv1[$i])) 
      ) 
     ); 
    } 
    if (isset($csv2[$i])) { 
     $finalcsv[] = implode(',', array_merge(
       array_combine($mergedHeaders, array_fill(0, count($mergedHeaders), null)), 
       array_combine($csv1Headers, explode(',', $csv1[$i])), 
       array_combine($csv2Headers, explode(',', $csv2[$i])) 
      ) 
     ); 
    } 
}