如何封装csv标题'用PHP引用双引号?

时间:2014-11-23 10:05:50

标签: php

如果我们说我有

$headers = array(
"userid",
"fname",
"lname");

我希望它们作为标题行(csv的最顶部)放置,用逗号分隔,并用双引号括起来。

我已经尝试了

$fp = fopen('data.csv', 'w+'); 
fputcsv($fp,$headers,',','"');
fclose($fp);

他们没有用双引号括起来......怎么做?

1 个答案:

答案 0 :(得分:2)

您可以尝试强制它:

$headers = array(
    '"userid"',
    '"fname"',
    '"lname"'
);

通过将值包装在实际引号中,然后只使用空白的外壳字符串:

$fp = fopen('data.csv', 'w+'); 
fputcsv($fp,$headers,',','');
fclose($fp);

强制它在“需要包含”字符中排除引号(PHP检查外壳字符是否已经在字符串内,并在必要时转义+封闭)。

但是,在新版本的PHP中,您将收到此错误:

fputcsv(): enclosure must be a character

在这种情况下,我建议您自己动手,如下:

function put_csv_headers($handle, $headers, $separator, $enclosure) {
    // [add some error checks here, of course]
    array_walk($headers, function(&$item, $i, $enc) {
        $item = $enc . $item . $enc; // wrap the header with the enclosure
    }, $enclosure);
    fputs($handle, implode($separator, $headers));
}

$headers = array('userid', 'fname', 'lname');
$fp = fopen('data.csv', 'w+'); 
put_csv_headers($fp, $headers, ',', '"');
fclose($fp);