php导出csv是非常常用的操作,网上也有灰常多的扩展。如果只是单纯的导出csv数据,完全没有必要去用扩展。现在做项目,都是代码能少就少,扩展能不用就不用。好了,不废话了,开干!
直接搞一个方法,能够在各种地方调用
php
/**
* 导出CSV
* $data 导出的数据信息
* $header 导出的表头信息
* $field 导出的字段信息
* $file 导出的文件名
*/
public function csv($data, $header, $field, $file)
{
// 临时文件目录
$directory = storage_path('app/temp');
// 判断临时文件目录是否存在
if (!File::isDirectory($directory)) {
// 创建一个临时文件目录
File::makeDirectory($directory, 0755, true);
}
// 临时文件名称
$filename = $file . date('YmdHis') . '.csv';
// 临时文件完整路径
$path = $directory . '/' . $filename;
// 打开文件进行写入
$fileCsv = fopen($path, 'w');
// 写入头部
fputcsv($fileCsv, $header);
// 循环所有的写入数据
foreach ($data as $row) {
// 获取所有的数据的key
$keys = array_keys($row);
// 追加数据空数组
$addRow = [];
// 循环追加的所有字段
foreach ($field as $k) {
// 判断追加的字段键是都存在
if (in_array($k, $keys)) {
// 追加到数据空数组
$addRow[] = $row[$k];
} else {
$this->error('字段' . $k . '不存在,请联系开发人员');
}
}
// 追加到文件
fputcsv($fileCsv, $addRow);
}
// 关闭文件
fclose($fileCsv);
// 将临时文件发送为下载响应
return response()->download($path, $filename)->deleteFileAfterSend();
}
假设导出会员信息
php
// 通过模型查询到用户数据
$data = \App\Models\Member::orderBy("id", "desc")->get()->toArray();
// 设置导出的表头(也就是第一行)
$header = ['ID', 'UID', '用户昵称', '用户手机', '累计消费', '注册时间'];
// 设置导出的字段
$field = ['id', 'uid', 'nike_name', 'phone', 'consume', 'created_at'];
// 调用导出
return $this->csv($data, $header, $field, 'member_');
每一行都有注释了,自行扩充,这是我自己一直用很简单的导出方式,希望大家阔以用得到