我有一段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"
有人可以开始我的大脑吗?
答案 0 :(得分:3)
查看PHP站点上的fputscsv
命令帮助:http://php.net/manual/en/function.fputcsv.php
第四个参数指定机箱字符。这是你想要的?但据我所知,如果字段需要它,则CSV put将仅包括引号,因为字段本身包含了分隔符字符或封装字符。
答案 1 :(得分:3)
我会使用fputscsv
的替代函数:
function my_fputcsv($handle, $fieldsarray, $delimiter = ",", $enclosure ='"'){
$glue = $enclosure . $delimiter . $enclosure;
return fwrite($handle, $enclosure . implode($glue,$fieldsarray) . $enclosure);
}
答案 2 :(得分:2)
这是一个快速解决方案,但它确实有效。
$value = '554,702180,25.00,6FYAK0,9090909090909090';
$new_value = '"' . implode('","', explode(',', $value)) . '"';
echo $new_value;
答案 3 :(得分:0)
看起来很简单:
$newrow[$key] = '"' . preg_replace("(\r\n|\n|\r|\t)", "", $val) . '"';
答案 4 :(得分:-1)
如果您想在不使用fputscsv
的情况下编写它,那么您可以使用与此类似的函数生成一行来写入文件:
function csvify ($array)
{
$temp = "";
$counter = 0;
foreach ($array as $element)
{
if ($counter > 0)
$temp = $temp . ",";
$counter ++;
$temp = $temp . "\"$element\"";
}
return $temp;
}