将报价添加到 CSV 导出

iam*_*esy 4 php csv

我正在使用 .csv 将数据导出到 CSV 文件fputcsv。我有正在写入的字符串,但是我要求数据用双引号括起来。

foreach ($orderDetails['lines'] as $line) {
     fputcsv($orderImportCsv, $line);
}
Run Code Online (Sandbox Code Playgroud)

在编辑器中打开时会创建以下内容(崇高)

L,M3344,,100

L,M3356,,50

我需要将这些字段中的每一个都用双引号括起来。

所以我试过这个:

foreach ($lines as &$line) {
    foreach ($line as &$column) {
        $column = '"' . $column . '"';
    }
}
Run Code Online (Sandbox Code Playgroud)

所以基本上这应该通过每一行字段并将其包装在“”中。但是运行后,我得到以下输出:

"""L""","""M3344""","""""","""100"""

"""L""","""M3356""","""""","""50"""

它现在在变量周围放置了 2 组双引号!

有一个更好的方法吗?

更新

我知道fputcsv有两个可选参数。分隔符和外壳。但是我相信外壳默认为“”,但仅当字符串被拆分为单独的单词时。

Álv*_*lez 5

由于您自己插入外壳,因此您必须指示 PHP 不使用任何外壳。似乎没有记录的方法来做到这一点,但使用空格似乎有效:

<?php
foreach($orderDetails['lines'] as $line){
    foreach ($line as &$column) {
        $column = '"' . $column . '"';
    }
    unset($column);

    fputcsv($orderImportCsv, $line, ',', ' ');
}
Run Code Online (Sandbox Code Playgroud)

或者您可以避免fputcsv()并自己编写所有内容。