【问题标题】:fputcsv() add quotes to every entry?fputcsv() 为每个条目添加引号?
【发布时间】:2017-02-11 05:47:02
【问题描述】:

使用此代码创建我的 CSV 导出文件:

foreach ($data_for_export as $row) {
    $data = [];
    array_push($data, $row->product_id);
    array_push($data, $row->product_name);
    array_push($data, $row->product_code);
    array_push($data, $row->text);

    fputcsv($file, $data);
}

fclose($file);

示例输出为:

2131,"Toys set 35", TSSET35, "Lorem ipsum dolor sit amet"

我试过了:

    preg_replace("/([a-z0-9]+)/i", '"$1"', $row->product_id)

    '"'.$row->product_id.'"'

使用“preg_replace”,我得到的报价比需要的多...

我需要所有出口项目的报价,我该怎么做?

【问题讨论】:

  • 为什么所有项目都需要报价? CSV 不需要它,这就是为什么 PHP 不会为不需要它的项目添加引号。
  • @deceze 这是客户的要求 :(

标签: php csv export-to-csv fputcsv


【解决方案1】:

通过strval函数将所有数据转换为字符串,然后尝试使用fwrite代替fputcsv

function push(&$data, $item) {
    $quote = chr(34); // quote " character from ASCII table
    $data[] = $quote . addslashes(strval($item)) . $quote;
}

foreach ($data_for_export as $row) {
    $data = [];

    push($data, $row->product_id);
    push($data, $row->product_name);
    push($data, $row->product_code);
    push($data, $row->text);

    // separate array items by ',' and add the End-Of-Line character
    fwrite($file, implode(',', $data) . PHP_EOL); 
}

fclose($file);

【讨论】:

  • 您可能还需要转义 $item 变量中的任何现有引号。
  • 我忘记了,感谢您的关注。代码已编辑。
  • 这里是最好的解决方案解决方案:stackoverflow.com/questions/15133892/add-quotes-to-csv-export 您可以使用 fputcsv,但您必须将机箱配置为空白。比你在你想要的地方手动添加引号。
猜你喜欢
  • 2022-01-22
  • 2017-12-17
  • 1970-01-01
  • 1970-01-01
  • 2011-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多