3 回答
![?](http://img1.sycdn.imooc.com/533e4c420001b2e502000200-100-100.jpg)
TA贡献1828条经验 获得超3个赞
我的解决方案要求数组的格式与问题中提供的格式不同:
<?
$data = array(
array( 'row_1_col_1', 'row_1_col_2', 'row_1_col_3' ),
array( 'row_2_col_1', 'row_2_col_2', 'row_2_col_3' ),
array( 'row_3_col_1', 'row_3_col_2', 'row_3_col_3' ),
);
?>
我们定义我们的功能:
<?
function outputCSV($data) {
$outputBuffer = fopen("php://output", 'w');
foreach($data as $val) {
fputcsv($outputBuffer, $val);
}
fclose($outputBuffer);
}
?>
然后,我们将数据输出为CSV:
<?
$filename = "example";
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename={$filename}.csv");
header("Pragma: no-cache");
header("Expires: 0");
outputCSV($data);
?>
我已经在几个项目中使用了它,并且效果很好。我应该注意,该outputCSV代码比我更聪明,所以我确定我不是原始作者。不幸的是,我没有知道我从哪里得到的,所以我不能把它归功于谁。
![?](http://img1.sycdn.imooc.com/54584f9d0001219b02200220-100-100.jpg)
TA贡献1804条经验 获得超8个赞
当您要在模板中创建和回显CSV时,对kingjeffrey的上述解决方案稍作修改(即-大多数框架将启用输出缓冲,并且您需要在控制器中设置标头等)。
// Create Some data
<?php
$data = array(
array( 'row_1_col_1', 'row_1_col_2', 'row_1_col_3' ),
array( 'row_2_col_1', 'row_2_col_2', 'row_2_col_3' ),
array( 'row_3_col_1', 'row_3_col_2', 'row_3_col_3' ),
);
// Create a stream opening it with read / write mode
$stream = fopen('data://text/plain,' . "", 'w+');
// Iterate over the data, writting each line to the text stream
foreach ($data as $val) {
fputcsv($stream, $val);
}
// Rewind the stream
rewind($stream);
// You can now echo it's content
echo stream_get_contents($stream);
// Close the stream
fclose($stream);
- 3 回答
- 0 关注
- 647 浏览
添加回答
举报