【问题标题】:How to remove the string double quotes when exporting array variables?导出数组变量时如何去掉字符串双引号?
【发布时间】:2016-02-09 14:29:18
【问题描述】:

我有一个 PHP 脚本,它以 TXT 格式读取数据库,清理日期字段并将其转换为 CSV。

我必须读取一行,将每个字段(除以字符数)分成一个数组,应用清理日期函数并以特定顺序将其导出到 CSV 文件中。

以这一行为例:

001001010006700603927229/05/201529/05/2016TELESALUD                                         J312324366523/01/2016RODRIGUEZ ALBERTO                                 0012345678                    RODRIGUEZ JUAN                                    008765432101/01/1960MTITULAR                                                                                   APLICA     

我把它分隔成一个数组:

$input = [
        trim(substr($line, 0, 3)),
        trim(substr($line, 3, 3)),
        trim(substr($line, 6, 7)),
        trim(substr($line, 13, 9)),
        trim(substr($line, 22, 10)),
        trim(substr($line, 32, 10)),
        trim(substr($line, 42, 50)),
        trim(substr($line, 92, 1)),
        trim(substr($line, 93, 10)),
        trim(substr($line, 103, 10)),
        trim(substr($line, 113, 50)),
        trim(substr($line, 163, 10)),
        trim(substr($line, 173, 20)),
        trim(substr($line, 193, 50)),
        trim(substr($line, 243, 10)),
        trim(substr($line, 253, 10)),
        trim(substr($line, 263, 1)),
        trim(substr($line, 264, 40)),
        trim(substr($line, 304, 50)),
        trim(substr($line, 354, 10))
    ];

然后,将函数应用到对应的字段后,我用这个数组重新组织它们:

$output = [
    '3',
    '3',
    $input[10],
    $input[13],
    $input[15],
    $input[16],
    '',
    '',
    '',
    '',
    $input[17],
    '',
    $input[3],
    $input[14],
    $input[4] ." " .$input[5],
    '',
    $input[19],
    $input[0] .$input[1] .$input[2] .$input[3]
];

最后,通过这个函数,我将结果导出到 CSV:

fputcsv($csv, $output, ";");

我的麻烦来了。 PHP 决定在特定字段中包含双引号。结果如下:

3;3;"RODRIGUEZ ALBERTO";"RODRIGUEZ JUAN";19600101;M;;;;;TITULAR;;006039272;0087654321;"20150529 20160529";;APLICA;0010010100067006039272

所有字段都应该是字符串格式,但我的猜测是 PHP 在包含空格的字段中包含双引号。

如果我将附件指定为这样的空字符:

fputcsv($csv, $output, ";", "");

或者像这样:

fputcsv($csv, $output, ';', chr(0));

它只是不会在 CSV 中写入任何行。 apache日志说外壳必须是一个字符。并且空白不是我们的选择。

此脚本在小型服务器上运行,但处理数百万行。我不想包含另一个删除引号的函数。

有没有办法告诉 PHP 不要在 CSV 中包含这些双引号?

【问题讨论】:

  • 去掉引号的函数是fgetcsv()。使用它,不用担心 PHP 会生成有效且可移植的 CSV。
  • 我希望我能做到这一点,但 CSV 转到另一家公司,该公司明确表示双引号对他们来说是非法字符。如果我使用另一个函数来删除引号,它会增加 6 个小时的过程。我希望有办法。

标签: php arrays csv


【解决方案1】:

那你为什么不使用不同的 PHP 函数,比如 fwrite()?

【讨论】:

  • 这实际上有效: foreach ($output as $field) { fwrite($csv, "$field" .";"); } fwrite($csv, "\n");不具有相同的性能,但它可以完成工作。谢谢!
猜你喜欢
  • 1970-01-01
  • 2019-04-23
  • 2021-12-21
  • 2014-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多