gpt4 book ai didi

php - 使用 PHP 在 CSV 文件中用双引号括起每个字段?

转载 作者:可可西里 更新时间:2023-10-31 22:48:43 26 4
gpt4 key购买 nike

我需要使用 PHP 将所有带双引号的字符串和数字放入 CSV 文件中。

如何在双引号内的所有数据中从 PHP 创建 CSV 文件?

我正在使用此代码生成 CSV - 我正在使用 codeigniter 框架

$array = array(
array(
(string)'XXX XX XX',
(string)'3',
(string)'68878353',
(string)'',
(string)'xxxx@xxxx.xxx.xx',
),
);

$this->load->helper('csv');
array_to_csv($array, 'blueform.csv');

我得到的输出:

"XXX XX XX",3,68878353,,xxxx@xxxx.xxx.xx

预期输出:

"XXX XX XX","3","68878353","","xxxx@xxxx.xxx.xx"

array_to_csv代码

if (!function_exists('array_to_csv')) {
function array_to_csv($array, $download = "") {
if ($download != "") {
header('Content-Type: application/csv');
header('Content-Disposition: attachement; filename="' . $download . '"');
}

ob_start();
$f = fopen('php://output', 'w') or show_error("Can't open php://output");
$n = 0;
foreach ($array as $line) {
$n++;
if (!fputcsv($f, $line)) {
show_error("Can't write line $n: $line");
}
}
fclose($f) or show_error("Can't close php://output");
$str = ob_get_contents();
ob_end_clean();

if ($download == "") {
return $str;
} else {
echo $str;
}
}
}

提前致谢

最佳答案

在 PHP 中构建 CSV 时,您应该使用 fputcsv PHP 5 提供的函数

根据文档,有以下参数:

int fputcsv ( resource $handle , array $fields [, string $delimiter = "," [, string $enclosure = '"' [, string $escape_char = "\" ]]] )

因为你有:

  • 您要写入的文件资源
  • 要放入 CSV 的数据
  • 分隔符(通常是逗号)
  • 字符串附件(这是你想要的引号)
  • 转义字符串(因此,如果您的数据包含封闭字符,您可以将其转义以避免它看起来像一个新字段)

默认情况下,分隔符为 和附件为 ",因此您无需添加更多内容。这将正确覆盖字符串。数字是另一回事。在 this SO question 上有一个解决方法,我在输入大部分内容后发现它仍然存在数字问题:

Not happy with this solution but it is what I did and worked. The idea is to set an empty char as enclosure character on fputcsv and add some quotes on every element of your array.

function encodeFunc($value) {
return "\"$value\"";
}

fputcsv($handler, array_map(encodeFunc, $array), ',', chr(0));

关于php - 使用 PHP 在 CSV 文件中用双引号括起每个字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31559174/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com