是否有本机函数或实体类/库用于将数组作为一行写入没有附件的CSV文件中?如果没有为机箱参数传入任何内容, fputcsv 将默认为" 。谷歌让我失望(返回关于 fputcsv 的大量网页的结果),而PEAR的库与 fputcsv 或多或少完全相同。

fputcsv 完全相同的东西,但会允许字段保持不加引号。

目前:" field 1"," field 2",field3hasNoSpaces

所需:字段1,字段2,field3hasNoSpaces

有帮助吗?

解决方案

有关上述附件的警告是有效的,但您说它们不适用于您的用例。

我想知道为什么你不能只使用这样的东西?

<?php
$fields = array(
    "field 1","field 2","field3hasNoSpaces"
);
fputs(STDOUT, implode($fields, ',')."\n");

其他提示

适用于 chr()功能:

fputcsv($f,$array,',',chr(0));

fputcsv($ file,$ data,';',chr(127));

这不起作用吗?

fputcsv($fp, split(',', $line),',',' ');

car(0)没有用,因为 NULL 值很可能会阻塞大多数csv解析器。

我最后使用 fputcsv()来构建初始文件,然后浏览并删除了所有引号。优雅?也许不是,但它完成了工作:)。

<?php       

$filename = "sample.csv";
$handle = fopen($filename, 'w+');
fputcsv($handle, ['column 1','column 2']);
$data = ['sample','data'];

fputs($handle, implode($data,',')."\n");

// or

fwrite($handle, implode($data,',')."\n");

fclose($handle);
$headers = array(
    'Content-Type' => 'text/csv',
);

我使用棘手的方法删除双引号,但仅限于Linux

....
fputcsv($fp, $product_data,"\t");
....
shell_exec('sed -i \'s/"//g\' /path/to/your-file.txt ');

这是我用来将标准CSV放入数组...

function csv_explode($delim=',', $str, $enclose='"', $preserve=false){
        $resArr = array();
        $n = 0;
        $expEncArr = explode($enclose, $str);
        foreach($expEncArr as $EncItem){
                if($n++%2){
                        array_push($resArr, array_pop($resArr) . ($preserve?$enclose:'') . $EncItem.($preserve?$enclose:''));
                }else{
                        $expDelArr = explode($delim, $EncItem);
                        array_push($resArr, array_pop($resArr) . array_shift($expDelArr));
                        $resArr = array_merge($resArr, $expDelArr);
                }
        }
        return $resArr;
} 

然后,您可以在foreach循环中输出任何内容。

使用没有附件的CSV文件的缺点意味着用户输入中的错误逗号将使行变得清晰。因此,在编写CSV行之前,您需要删除逗号。

处理CSV的棘手部分是解析外壳,这使PHP&amp; PEAR CSV功能很有价值。基本上,您正在寻找一个以逗号分隔的列和行换行符分隔的文件。这是一个简单的起点:

<?php
$col_separator= ',';
$row_separator= "\n";

$a= array(
 array('my', 'values', 'are', 'awes,breakit,ome'),
 array('these', 'values', 'also', "rock\nAND\nROLL")
);

function encodeRow(array $a) {
 global $col_separator;
 global $row_separator;
 // Can't have the separators in the column data!
 $a2= array();
 foreach ($a as $v) {
  $a2[]= str_replace(array($col_separator, $row_separator), '', $v);
 }
 return implode($col_separator, $a2);
}

$output= array();
foreach ($a as $row) {
 $output[]= encodeRow($row);
}

echo(implode($row_separator, $output));

?>

chr(0) 也对我有用:

 fputcsv($fp, $aLine, $sDelimiter, chr(0));

想出来。通过将Null的ascii代码传递给 car()函数,它似乎工作正常。

fputcsv($ f,$ array,$ delimiter,car(0))

感谢大家的答案!!!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top