我有一个包含以下值的现有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
我如何才能实现上述目标?
答案 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函数fgetcsv
和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);
}
接下来,使用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);
}
您可以结合使用这些步骤,通过减少循环次数来提高代码效率。