1

我有一段 php 代码,它从数据库结果集中读取值,将它们推送到数组中,然后将它们写入 CSV 文件。当每个值进入 CSV 文件时,我需要强制用双引号括起来,并且我一生都无法记住如何做到这一点。

这是写入文件的循环(这实际上包含在另一个循环中以遍历每一行;我展示的这个循环遍历当前选定行中的列):

foreach ($row as $key => $val){

    $newrow[$key] = preg_replace("(\r\n|\n|\r|\t)", "", $val);

}

fputcsv($fp, $newrow);

我需要的是 $val 的值在写入文件时用双引号引起来。现在,我得到的结果如下所示:

554,702180,25.00,6FYAK0,9090909090909090

我需要的是这个:

"554","702180","25.00","6FYAK0","9090909090909090"

有人可以启动我的大脑吗?

4

5 回答 5

3

我会使用替代功能fputscsv

function my_fputcsv($handle, $fieldsarray, $delimiter = ",", $enclosure ='"'){
    $glue = $enclosure . $delimiter . $enclosure;
    return fwrite($handle, $enclosure . implode($glue,$fieldsarray) . $enclosure);
}
于 2010-11-01T21:51:09.353 回答
3

查看fputscsvPHP 站点上的命令帮助:http: //php.net/manual/en/function.fputcsv.php

第四个参数指定一个包围字符。这是你想要的?但是,据我了解,CSV put 仅在字段需要引号时才包含引号,因为字段本身包含分隔符或包围字符。

于 2010-11-01T19:54:38.720 回答
2

这是一个快速修复,但它有效。

$value = '554,702180,25.00,6FYAK0,9090909090909090';

$new_value = '"' . implode('","', explode(',', $value)) . '"';

echo $new_value;
于 2010-11-01T19:53:32.110 回答
0

看起来很简单:

 $newrow[$key] = '"' . preg_replace("(\r\n|\n|\r|\t)", "", $val) . '"';
于 2010-11-01T19:48:32.477 回答
-1

IF you want to write it without using fputscsv then you could use a function similar to this to generate a line to write to a file:

function csvify ($array)
{
   $temp = "";
   $counter = 0;
   foreach ($array as $element)
   {
      if ($counter > 0)
         $temp = $temp . ",";
      $counter ++;
      $temp = $temp . "\"$element\"";
   }
   return $temp;
}
于 2010-11-01T20:07:51.913 回答