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


    php导出csv是非常常用的操作,网上也有灰常多的扩展。如果只是单纯的导出csv数据,完全没有必要去用扩展。现在做项目,都是代码能少就少,扩展能不用就不用。好了,不废话了,开干!

    直接搞一个方法,能够在各种地方调用

    /**
     * 导出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();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

    假设导出会员信息

    // 通过模型查询到用户数据
    $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_');
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

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

  • 相关阅读:
    车内信息安全技术-安全技术栈-软件安全
    nodejs--开发自己的项目——2.1——注册用户信息
    新款FTP替代系统重磅登场!怎样摆脱传统FTP弊端?
    C++11新特性 变参模板、完美转发和emplace
    SAP S4 FI后台详细配置教程- PART4 (科目及税费相关配置篇)
    2019年全国硕士研究生入学统一考试管理类专业学位联考数学试题——解析版
    SpringMVC ---- @RequestMapping注解
    Apollo 应用与源码分析:CyberRT概念与Bazel
    外包干了2年,彻底废了...
    [CISCN 2023 初赛]go_session
  • 原文地址:https://blog.csdn.net/qq_36901092/article/details/132895164