在php - csv行中将CSV导出为变量

时间:2015-03-12 21:37:21

标签: laravel laravel-4 export-to-csv

我想使用PHP Laravel将数据导出到CSV文件中。

我将每一行用作变量并最后添加到csv。它帮助我创建自定义CSV文件collumn标头,因此我必须遵循此规则。

我所做的就是这个 -

$tweets = DB::select(DB::raw($query));

    foreach ($tweets as $row)
    {
        $row = get_object_vars($row);
        // iterate over each tweet and add it to the csv

        $output .=  implode(",",
                            array(
                                $row['completion_date'],
                                $row['site_id'],
                                $row['country'],
                                $row['state'],
                                $row['city'],
                                $row['active_ipp'],
                                $row['description_of_project'],
                                $row['total_excess_furniture']
                                )
                            ); // append each row
        $output .="\n";     //Adding New Line
    }

    $headers = array(
        'Content-Type' => 'text/csv',
        'Content-Disposition' => 'attachment;filename="'.Carbon\Carbon::now()->toDateTimeString().'.csv"',
    );
    return Response::make(rtrim($output, "\n"), 200, $headers);

它正在处理一些错误。

错误是,当对象字符串中有逗号时,它不能完美地工作。

所以,我认为我不能使用 implode

还有其他解决方案可以将CSV行添加为这样的变量吗?

1 个答案:

答案 0 :(得分:2)

您可以尝试以下方式:

$items = [
    [
        'field1' => 'string with " quotes',
        'field2' => 'string without commas',
    ],
    [
        'field1' => 'string without quotes',
        'field2' => 'string, with, commas',
    ],
];

ob_start();
$buffer = fopen('php://output', 'w+');
foreach($items as $item) {
    fputcsv($buffer, [
        $item['field1'],
        $item['field2'],
    ]);
}
$output = ob_get_clean();

fputcsv将处理变量中的逗号或引号。您可以将输出发送到缓冲区,并使用ob_startob_get_clean将其存储到变量中,而不是将输出写入文件。