如何在 PHP 中的数据导出中防止字符转换为整数


How to prevent character conversion to integer in data export in PHP

我在页面上有一个链接,单击该链接时,使用fputcsv将数据数组导出为csv。 当 Excel 显示数据时,有一列看起来像整数,但事实并非如此,Excel 正在将其转换为科学记数法。 如何导出数据,以便此列显示为字符(而不是科学数字(?

我用于导出的代码来自Alain Tiemblo在这里的回答:链接到代码

function array2csv(array &$array)
{
   if (count($array) == 0) {
     return null;
   }
   ob_start();
   $df = fopen("php://output", 'w');
   fputcsv($df, array_keys(reset($array)));
   foreach ($array as $row) {
      fputcsv($df, $row);
   }
   fclose($df);
   return ob_get_clean();
}

不确定Excel,但如果CSV字段被引用,LibreOffice和OpenOffice会将字段作为字符串导入。例如,您希望 CSV 如下所示:

foo,bar,"12345",baz

(您可能还必须在文件打开对话框中选中"引用字段作为文本"选项。

编辑:PHP 的 fputcsv(( 函数只会在需要时使用引号包装器,因此您可能必须自己手动在实际字段值周围强制使用引号:

$field = 12345;
$quoted_field = '"' . $field . '"';

编辑 2:如果你不需要担心转义,这可能对你有用,而不是 fputcsv((:

fwrite($fp, '"' . implode($fields, '","') . '"' . "'n");

尝试在 fputcsv 之前强制 int 进入字符串。

例如

$foo = "$foo";

http://php.net/manual/en/language.types.type-juggling.php

但话又说回来,Excel 在将您的 CSV 转换为 Excel 格式时可能会自己决定......

这个问题也可能有所帮助: Excel CSV - 数字单元格格式

您可以使用 strval 将值转换为字符串。

使用 :- 将整数转换为字符串字符串,strval或双引号/单引号中的封闭值,甚至与变量连接空格都不起作用,因为CSV不保存字段类型信息。

我发现的唯一方法是添加一些字符或符号以强制使其成为字符串,但这也会显示在输出中。