最简单的laravel不使用任何扩展导出csv

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_');

每一行都有注释了,自行扩充,这是我自己一直用很简单的导出方式,希望大家阔以用得到

相关推荐
会Tk矩阵群控的小木7 小时前
云控系统在TikTok多账号管理中的核心应用与技术实现
开发语言·php·开源软件·个人开发·tk矩阵
傻啦嘿哟8 小时前
降低首字延迟(TTFB):专线节点与TCP Fast Open的配置
开发语言·php
介一安全9 小时前
【漏洞学习】PHP+Windows环境通用文件上传漏洞深度剖析
windows·web安全·php·文件上传·安全性测试
郝学胜-神的一滴14 小时前
系统设计 013:高并发系统缓存:从原理到实践全解析
java·开发语言·python·缓存·系统架构·php·软件构建
程序二次开发17 小时前
wordpress 文章页,文章分类,单页,woocommerc 产品页,分类页添加.html后缀
大数据·前端·html·php
M1582276905518 小时前
工业级 CAN 转以太网网关|SG-CANET-210/410,打通 CAN 与以太网,工业通信无边界
单片机·嵌入式硬件·php
热爱Liunx的丘丘人18 小时前
搭建一个 Web + 数据库系统(Nginx+PHP+MySQL)
数据库·nginx·php
AC赳赳老秦18 小时前
OpenClaw多Agent分工协作:按工作模块拆分Agent,实现全流程自动化闭环
java·大数据·数据库·python·自动化·php·openclaw
handler0119 小时前
【Linux】五种IO模型详解
linux·运维·服务器·c语言·网络·笔记·php
xingyuzhisuan1 天前
网络 Token 常见故障原理,基础排查科普
运维·服务器·网络·php