我有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]))
)
);
}
}