导出到csv格式问题

时间:2013-05-05 16:54:17

标签: php fputcsv

我正在尝试将一些数据导出到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
    "

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

此外,在其他一些项目中,该功能将项目名称分为两个项目。例如:

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

所以显然我已经离开这里了,如果有人可以帮我这个,我真的很想学习正确的方法应该做这件事,检查php.net文档相当多,但是很多时候我发现这种资源令人难以置信的压倒性的,这就是这样的场合。

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

谢谢, 弗兰克

1 个答案:

答案 0 :(得分: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的字段的数组,该字段负责封闭和分隔字段以及行结尾。