使用php

时间:2016-03-21 22:33:28

标签: php csv

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

column1 column2
Fr-fc   Fr-sc
Sr-fc   Sr-sc

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

column1 column2 column3 column4
Fr-fc   Fr-sc     1        2
Sr-fc   Sr-sc     1        2

如果我使用以下代码,则会在新创建的列

的列数据中插入相同的列标题值
$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

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

2 个答案:

答案 0 :(得分:4)

这种方法代码较少

<?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);

答案 1 :(得分:2)

您可以分别使用php内置的csv函数fgetcsvfputcsv来轻松完成工作,而不是重新发明轮子。首先使用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);
}

接下来,使用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);
    }
}

最后使用fputcsv将每行输入csv。

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

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