php 将一列从CSV合并/移动到另一CSV作为最后一列

irlmq6kh  于 2022-10-30  发布在  PHP
关注(0)|答案(1)|浏览(198)

我有两个CSV文件。第一个包含两列(逗号分隔),第二个只包含一列。
我尝试将它们合并,并将第二个文件中的列作为最后一列移动到第一个文件中。
问题在于:当我运行脚本时,该列将转到第一个文件中,但它不会作为最后一列添加到文件中,而是完全替换了文件的内容。
file_2.csv

1,13414214
6,13414214
13,13
3,33129

file_2.csv

title_1
title_2
title_3
title_4

组合后,file_1.csv应如下所示

1,13414214,title_1
6,13414214,title_2
13,13,title_3
3,33129,title_4

这些文件具有相同的行号。
这是我目前掌握的情况

$file = fopen("file_1.csv","w");
$row = 1;
if (($handle = fopen("file_2.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000)) !== FALSE) {
        $num = count($data);
        $row++;
        echo $data[0]. "\n";
        fputcsv($file, $data);
    }
}
fclose($handle);
fclose($file);

任何帮助都是感激不尽的。
UPDATE:这是答案的输出

1,13414214
,title_1

6,13414214
,title_2

13,13
,title_3

3,33129
,title_4
33qvvth1

33qvvth11#

为了简单起见,我不会尝试写入file_1,只需要读取file_1file_2,然后写入file_3即可。类似于:

$file1 = file("file_1.csv");
$file2 = file("file_2.csv");
$lines3 = [];
foreach ($file1 as $line1No => $line1) {
    $line2 = $file2[$line1No] ?? "";
    $lines3[] = trim($line1) . "," . trim($line2);
}
file_put_contents("file_3.csv", implode(PHP_EOL, $lines3));

正如您所看到的,我将这些文件视为简单的文本文件,而不是CVS文件,因为我不需要对其中的数据做任何事情。
请注意,只有当file_1.csvfile_2.csv包含相同数量的行时,这才会稍微起作用。
哦,还有:对于非常大的文件,这可能不是最好的方法。那么逐行读取它们可能会更好,尽管会慢很多。

相关问题