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

问题描述 投票:0回答:1

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

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

我所做的是这样的-

$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 行添加为这样的变量吗?

laravel laravel-4 export-to-csv
1个回答
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_start
ob_get_clean
将其存储到变量,而不是将输出写入文件。

© www.soinside.com 2019 - 2024. All rights reserved.