PHP 将所有字段括在引号中 fputcsv()

PHP Wrap ALL fields in quotes fputcsv()

提问人:Paul Shears 提问时间:11/19/2020 最后编辑:Krzysztof MadejPaul Shears 更新时间:11/19/2020 访问量:128

问:

我对PHP比较陌生,所以请耐心等待。

我的代码目前如下所示:

<?php

require("database.php");

$localfile = "FileName.csv";
$fp = fopen($localfile, "w"); 
$enclosure = '"';
$delimiter = ',';

if(!$link)
{
    echo "DB Connection ERROR";
}

$query = "SELECT * FROM A_Table WHERE Stuff";

$result=mysqli_query($link,$query);

while($row = mysqli_fetch_assoc($result))
    {
        fputcsv($fp,$row,$delimiter,$enclosure);
    }

fclose($localfile);

?>

这按预期工作,但是,客户端要求所有字段都包装在引号中,而不仅仅是那些包含空格的字段。我在网上看到了很多解决方案,但它们似乎都过于复杂,或者似乎建议我应该在导出 CSV 后对其进行编辑。

如果是这样的话,那么我会坚持下去,但有没有人对我的困境有一个相对简单的解决方案?

普通代码将输出:col1,col2,"col 3",col4

我想输出:"col1","col2","col 3","col4"

任何帮助将不胜感激。

提前致谢, 保罗

php mysql 引用 fputcsv

评论


答:

0赞 Ro Achterberg 11/19/2020 #1

试试这个以获得灵感。您可以将参数替换为您在此处的演示中看到的行:$rowfputcsv()array_map()

<?php

// Sample values
$unquoted = ['these', 'are', 'some', 'unquoted', 'example', 'values'];

// One-liner to quote every array element and output to new array.
$quoted = array_map(function ($element) { return "\"$element\""; }, $unquoted);

var_dump($quoted);
/*
Output:
array(6) {
  [0]=>
  string(7) ""these""
  [1]=>
  string(5) ""are""
  [2]=>
  string(6) ""some""
  [3]=>
  string(10) ""unquoted""
  [4]=>
  string(9) ""example""
  [5]=>
  string(8) ""values""
}
*/

评论

0赞 Paul Shears 11/19/2020
您好,感谢您的帮助...我快到了!我想,我现在有 $result=mysqli_query($link,$query);while($row = mysqli_fetch_assoc($result)) { $quoted = array_map(function ($element) { return “\”$element\“; }, $row); fputcsv($fp,$quoted); }这将输出用引号括起来的字段...但是 3 两边都 “”“col1”“”“,你知道我的下一步是什么吗?
0赞 Ro Achterberg 11/19/2020
尝试将 替换为 。return "\"$element\""return '"' . trim($element, '"') . '"'
0赞 Paul Shears 11/19/2020
我认为这是正确的方向,但它正在返回同样的东西。就好像它用引号括起来一样。我的意思是,如果我写,我会得到“ col1 ”。return ' '.$element,' '
0赞 Ro Achterberg 11/19/2020
如果您的某些字段已经用双引号引起来,那么您可以省略“enclosure”参数,并结合我的单行(包括 )。array_map()trim()
0赞 Paul Shears 11/20/2020
已经找到了解决方案!你的方法很棒,我非常感谢你,因为你向我介绍了array_map的可能性,但是,解决方案是使用而不是完整的解决方案fwritefputcsvwhile($row = mysqli_fetch_array($result, MYSQLI_NUM)) { fwrite($fp, '"'.implode('","', $row) . "\"\r\n"); }