0

我正在尝试将一些数据导出到 csv 文件中,我已经将数据放入文件中,这是我的代码:

*如果代码不好,请原谅,我从来没有做过这样的事情,这是我让它工作的唯一方法。

    /* CSV Export - Create Row */
    $csv_row_content .= $userdata->id.',';
    $csv_row_content .= $userdata->firstname.' '.$userdata->lastname;
    $csv_row_content .= ','.$split_date[2].'-'.$split_date[1].'-'.$split_date[0].',';
    $csv_row_content .= $sale->name;
        if($sale->optionlabel):
            $csv_row_content .= ' ('.$sale->optionlabel.')';
        endif;
    $csv_row_content .= ',';
    $csv_row_content .= $sale->status.',';
    $csv_row_content .= number_format($sale->unitprice, 2, '.', '');
    $csv_row_content .= "\r\n";

    $data_array[] = $csv_row_content;

    $csv_file = fopen('../wp-content/plugins/data-export/export_doc.csv', 'w');
    foreach ($data_array as $single_line)
        {
    fputcsv($csv_file,split(',',$single_line));
        }
    fclose($csv_file);

    /* Clear Array */
    unset($data_array);
    $data_array = array();

它可以正常工作,只是我在某些项目上的引号有问题

    303,"User Name",12-02-2013,"College Sweater (Black)",,"20.00
    207","User Name",30-01-2013,"College Sweater (Black)",,"20.00
    "

所以我不确定第一个和最后一个项目是什么,一个引号有时会出现,而其他引号不会出现。注意第 207 行和两行最后一个值上的奇数引号。在第三行还有一个新行开始,只有一个单引号。

同样在其他一些项目上,该功能将项目的名称分成两个项目。例如:

    207","User Name",30-01-2013,"College ","Sweater (Black)",,"22.73

所以很明显我在这里的某个地方离开了基地,如果有人可以帮助我,我真的很想学习这种事情应该做的正确方法,检查了 php.net 文档很多,但是很多当我发现该资源令人难以置信的压倒性时,这是一个这样的场合。

如果有人能指出我正确的方向,我将不胜感激。我更愿意理解这一点,而不仅仅是复制和粘贴解决方案。

谢谢,弗兰克

4

1 回答 1

1

您正在手动创建一个 CSV 字符串并将其拆分,然后再使用fputcsv将其重新组合在一起。试试这个:

$row = array(
    $userdata->id,
    $userdata->firstname . ' ' . $userdata->lastname,
    $split_date[2] . '-' . $split_date[1] . '-' . $split_date[0],
    $sale->name . ($sale->optionlabel ? $sale->optionlabel : ''),
    $sale->status,
    number_format($sale->unitprice, 2, '.', '')
);

$data[] = $row;

$csv_file = fopen('../wp-content/plugins/data-export/export_doc.csv', 'w');

foreach ($data as $line) {
    fputcsv($csv_file, $line);
}
fclose($csv_file);

这将创建一个数组,其中包含所有可以传递的字段,该数组fputcsv负责封闭和分隔字段以及行尾。

于 2013-05-05T17:07:56.810 回答