提问人:Paul Shears 提问时间:11/19/2020 最后编辑:Krzysztof MadejPaul Shears 更新时间:11/19/2020 访问量:128
PHP 将所有字段括在引号中 fputcsv()
PHP Wrap ALL fields in quotes fputcsv()
问:
我对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"
任何帮助将不胜感激。
提前致谢, 保罗
答:
0赞
Ro Achterberg
11/19/2020
#1
试试这个以获得灵感。您可以将参数替换为您在此处的演示中看到的行:$row
fputcsv()
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的可能性,但是,解决方案是使用而不是完整的解决方案fwrite
fputcsv
while($row = mysqli_fetch_array($result, MYSQLI_NUM)) { fwrite($fp, '"'.implode('","', $row) . "\"\r\n"); }
下一个:查找 “ 的索引在字符串中
评论