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

时间:2013-10-09 17:01:32

标签: php fputcsv

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

我用于导出的代码来自Alain Tiemblo的回答: Link to Code

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();
}

4 个答案:

答案 0 :(得分:1)

不确定Excel,但如果引用了CSV字段,LibreOffice和OpenOffice会将字段导入为字符串。例如,您希望CSV类似于:

foo,bar,"12345",baz

(您可能还需要在文件打开对话框中选中“引用字段为文本”选项。)

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

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

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

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

答案 1 :(得分:0)

尝试在你的fputcsv之前强制你的int。

例如

$foo = "$foo";

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

但是,当您将CSV转换为Excel格式时,Excel可能会自己决定...

此问题也可能有所帮助:Excel CSV - Number cell format

答案 2 :(得分:0)

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

答案 3 :(得分:0)

使用以下方法将整数转换为字符串: 字符串,strval或用双引号/单引号括起来的值,甚至是带变量的concat空格都不起作用,因为CSV不包含字段类型信息。

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