使用 php 在 csv 文件中添加 2 个新的列标题和内容

ami*_*ree 3 php csv

我有一个具有以下值的现有 csv 文件

column1 column2
Fr-fc   Fr-sc
Sr-fc   Sr-sc
Run Code Online (Sandbox Code Playgroud)

我想在其中添加 2 个新列并实现以下格式

column1 column2 column3 column4
Fr-fc   Fr-sc     1        2
Sr-fc   Sr-sc     1        2
Run Code Online (Sandbox Code Playgroud)

如果我使用以下代码,它会在新创建的列的列数据中插入相同的列标题值

$a = file('amit.csv');// get array of lines
$new = '';
foreach($a as $line){
    $line = trim($line);// remove end of line
    $line .=";column3";// append new column
    $line .=";column4";// append new column
    $new .= $line.PHP_EOL;//append end of line
}
file_put_contents('amit2.csv', $new);// overwrite the same file with new data
Run Code Online (Sandbox Code Playgroud)

我如何才能实现上述目标?

top*_*her 5

fgetcsv您可以分别使用 php 的内置 csv 函数和来简化您的工作,而不是重新发明轮子fputcsv。首先读取每一行并将fgetcsv数据存储在多维数组中:

$delimiter = "\t"; //your column separator
$csv_data = array();
$row = 1;
if (($handle = fopen('test.csv', 'r')) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, $delimiter)) !== FALSE) {
        $csv_data[] = $data;
        $row++;
    }
    fclose($handle);
}
Run Code Online (Sandbox Code Playgroud)

接下来编辑行以使用array_merge添加额外的列:

$extra_columns = array('column3' => 1, 'column4' => 2);
foreach ($csv_data as $i => $data) {
    if ($i == 0) {
        $csv_data[$i] = array_merge($data, array_keys($extra_columns));
    } else {
        $csv_data[$i] = $data = array_merge($data, $extra_columns);
    }
}
Run Code Online (Sandbox Code Playgroud)

最后用于fputcsv将每一行输入到 csv 中。

if (($handle = fopen('test.csv', 'w')) !== FALSE) {
    foreach ($csv_data as $data) {
        fputcsv($handle, $data, $delimiter);
    }
    fclose($handle);
}
Run Code Online (Sandbox Code Playgroud)

您可以组合这些步骤,通过减少循环次数来提高代码效率。


use*_*349 5

这种方法代码较少

<?php
$inFile = fopen('test.csv','r');
$outFile = fopen('output.csv','w');

$line = fgetcsv($inFile);
while ($line !== false) {
        $line[] = 'third column';
        $line[] = 'fourth column';
        fputcsv($outFile, $line);
        $line = fgetcsv($inFile);
}
fclose($inFile);
fclose($outFile);
Run Code Online (Sandbox Code Playgroud)