用PHP水平合并CSV文件

用PHP水平合并CSV文件,php,csv,Php,Csv,您好,我只是想知道这在PHP中是否可行,下面是一个场景 我有一个CSV文件示例“first.CSV”: "Name","Age","Job" "Peter Algarve","17","Mechanic" "Will Smith","50","Actor" 然后我有一个CSV“second.CSV”: "Origin","Eye Color","Birthday" "Jamaica","Red","17-8-1967" "USA","Brown","2-8-1969" 现在我要做的是将第二个

您好,我只是想知道这在PHP中是否可行,下面是一个场景

我有一个CSV文件示例“first.CSV”:

"Name","Age","Job"
"Peter Algarve","17","Mechanic"
"Will Smith","50","Actor"
然后我有一个CSV“second.CSV”:

"Origin","Eye Color","Birthday"
"Jamaica","Red","17-8-1967"
"USA","Brown","2-8-1969"
现在我要做的是将第二个CSV数据添加到第一个CSV的行末尾,如下所示:

"Name","Age","Job","Origin","Eye Color","Birthday"
"Peter Algarve","17","Mechanic","Jamaica","Red","17-8-1967"
"Will Smith","50","Actor","USA","Brown","2-8-1969"

请注意,我还需要添加逗号来分隔新列,有什么方法可以在PHP中实现吗?

使用
file()将每个文件读入一个数组。

迭代数组并构造一个新数组,将两行连接起来,用逗号分隔
并使用
trim()
删除沿途可能遇到的任何新行字符

foreach ($first as $i=>$row){
    $result[$i] = trim($row) . "," . trim($second[$i]);
}
将生成的数组写入新的csv文件

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

foreach ($result as $line) {
    fputcsv($fp, $line);
}

fclose($fp);
执行
打印($result)
将输出

Array
(
    [0] => "Name","Age","Job","Origin","Eye Color","Birthday"
    [1] => "Peter Algarve","17","Mechanic","Jamaica","Red","17-8-1967"
    [2] => "Will Smith","50","Actor","USA","Brown","2-8-1969"
)

如果要创建合并输出的csv,无需将所有数据读入内存,只需逐行读取、合并和写入即可:

$fileOneHandle     = fopen('first.csv', 'r');
$fileTwoHandle     = fopen('second.csv', 'r');
$fileMergedHandle  = fopen('merged.csv', 'w');

while($fileOneLine = fgetcsv($fileOneHandle) && $fileTwoLine = fgetcsv($fileTwoHandle)){
    fputcsv($fileMergedHandle, array_merge($fileOneLine, $fileTwoLine));
}

fclose($fileOneHandle);
fclose($fileTwoHandle);
fclose($fileMergedHandle);

是的,有很多方法。档案有多大?行的顺序总是正确的吗?您是否尝试了任何失败的操作?将两个CSV读入数组(例如,
fgetcsv()
),然后将一个数组记录的元素推入另一个数组的相应记录中。
$fileOneHandle     = fopen('first.csv', 'r');
$fileTwoHandle     = fopen('second.csv', 'r');
$fileMergedHandle  = fopen('merged.csv', 'w');

while($fileOneLine = fgetcsv($fileOneHandle) && $fileTwoLine = fgetcsv($fileTwoHandle)){
    fputcsv($fileMergedHandle, array_merge($fileOneLine, $fileTwoLine));
}

fclose($fileOneHandle);
fclose($fileTwoHandle);
fclose($fileMergedHandle);