我试图将php/mysql生成的表转换为可下载的csv文件.当用户输入搜索参数时,将调用mysql表并将结果作为表返回.
我使用了这个线程中提供的解决方案并且工作得非常好: 在PHP中为用户创建一个CSV文件
我能够允许用户将结果保存或查看为csv文件.我遇到的问题是我不确定如何将列标题添加到文件中.例如,返回的结果采用以下格式:$ result [x] ['office'],$ result [x] ['user']等等,但我还想添加列标题"Office"和"User"使得任何查看csv文件的人都能立即知道数据的含义.
这是生成csv文件的函数:
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=$file.csv");
header("Pragma: no-cache");
header("Expires: 0");
outputCSV($data);
function outputCSV($data) {
$outstream = fopen("php://output", "a");
function __outputCSV(&$vals, $key, $filehandler) {
fputcsv($filehandler, $vals); // add parameters if you want
}
array_walk($data, "__outputCSV", $outstream);
fclose($outstream);
}
Run Code Online (Sandbox Code Playgroud)
我尝试创建以下函数,然后在调用outputCSV之前调用它,但它不成功:
function create_file_header()
{
$headers = 'Office, User, Tag, Value';
$fp = fopen("php://output", "w");
file_put_contents("$file.csv", $headers);
fclose($fp);
}
Run Code Online (Sandbox Code Playgroud)
任何帮助是极大的赞赏.
Fra*_*ila 10
要创建标题,您应该只添加标题行数组并fputcsv正常使用.
您没有谈论格式$data,但如果它是关联数组,您可以为通用解决方案执行此操作:
function toCSV($data, $outstream) {
if (count($data)) {
// get header from keys
fputcsv($outstream, array_keys($data[0]));
//
foreach ($data as $row) {
fputcsv($outstream, $row);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我没有看到array_walk()过foreach循环的好处.
| 归档时间: |
|
| 查看次数: |
25780 次 |
| 最近记录: |