我想使用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行添加为这样的变量吗?
答案 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_start
和ob_get_clean
将其存储到变量中,而不是将输出写入文件。