2010-02-28 111 views
1

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

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

请注意,这两个函数适用于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); 
?> 
+0

谢谢,非常完美! :) – 2010-02-28 15:19:19