用fputcsv覆盖列

时间:2010-02-28 13:34:43

标签: php csv

我想解析,处理然后只覆盖csv文件中的1个特定列,我对前两个步骤很好,但是我遇到了第三个问题。这是我到目前为止所做的:

<?php
$fh = fopen("data.csv", "r");
$row = 1;
while (($data = fgetcsv($fh, 1024, ",")) !== FALSE) {
$get = $data[2];
$uc = ucwords(strtoupper($get));
echo $uc;
}
?>

显示正常,我只需要将处理过的内容写回原始列。我知道这是用fputcsv完成的,但我似乎无法让它工作:

$fp = fopen('data.csv', 'w');
fputcsv($fp, $uc, ",");
fclose($fp); 

这只是擦除整个文件。使用fwrite时也一样。有什么想法吗?

感谢。

1 个答案:

答案 0 :(得分:1)

请注意,这两个功能适用于lines,而不适用于整个文件。

因此,当你写出来时,你将不得不重建它,如:

<?php
$list = array (
   'aaa,bbb,ccc,dddd',
   '123,456,789',
   '"aaa","bbb"'
);

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

foreach ($list as $line) {
   fputcsv($fp, split(',', $line));
}

fclose($fp);
?>

未测试

<?php
$fh = fopen("data.csv", "r");
$row = 1;
$list=array();
while (($data = fgetcsv($fh, 1024, ",")) !== FALSE) {
    $data[2] = ucwords(strtoupper($data[2]));
    $list[]=$data; // collect lines
}
fclose($fh);

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

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

fclose($fp);
?>