PHP数据导出CSV格式文件

前言:

       之前在做数据导出功能时一直使用PHPexcel进行处理的,这个的功能还是比较强大的,但是比较沉重,在数据量比较打时,还是比较吃内存的。经常会遇到超时或者内存不足。解决方式都是网上的几种,百度google一大推,供参考。github传送地址 https://github.com/PHPOffice/PHPExcel

       由于就是数据导出,所以后面使用了导出csv格式数据,摒弃了PHPExcel。导出大量数据时可以将数据进行分批量的导出,防止数组内容过大占内存而导致的报错。

        $headArr = ['用户ID', '姓名', '手机号', '手机归属地', '定位城市', '选定车位', '价格(元)', '关注车位', '参与时间'];

        set_time_limit(0);
        //文件名
        $filename = $activity_info['name'] . "用户名单.csv";
        //直接输出到浏览器
        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename="' . $filename);
        header('Cache-Control: max-age=0');
        $fp = fopen('php://output', 'a');
        //写入头部标题
        $csv_header = [];
        for ($i = 0; $i < count($headArr); $i++) {
            array_push($csv_header, mb_convert_encoding($headArr[$i], 'gb2312', 'utf-8'));//注意编码问题,若使用icovn部分转码失败直接返回空
        }
        fputcsv($fp, $csv_header);

        //进行分页获取,每页获取
        $limit = 1000;
        for ($page = 1; $page < 40; $page++) {
            $list = $signupModel->getParkingUserList($condition, $page, $limit);
            if (empty($list['data'])) {
                break;
            }
            foreach ($list['data'] as $key => $val) {
                $tmp = [];
                $tmp['signup_id'] = $val['signup_id'];//用户ID
                $tmp['username'] = $val['username'] ? str_replace("null", "", $val['username']) : '-';//选定用户
                $tmp['username'] = mb_convert_encoding($tmp['username'], 'gb2312', 'utf-8');//用户名称
                $tmp['mobile'] = $val['mobile'] ? $val['mobile'] : '-';
                $tmp['mobile_city'] = $val['mobile_city'] ? $val['mobile_city'] : '-';//手机归属地
                $tmp['mobile_city'] = mb_convert_encoding($tmp['mobile_city'], 'gb2312', 'utf-8');
                $tmp['ip_city'] = $val['ip_city'] ? $val['ip_city'] : '-';//定位城市
                $tmp['ip_city'] = mb_convert_encoding($tmp['ip_city'], 'gb2312', 'utf-8');
                $tmp['parking_id'] = $val['parking_id']?$val['parking_id'].'('.$val['car_no'].')':'';//选定车号
                $tmp['parking_id'] = mb_convert_encoding($tmp['parking_id'], 'gb2312', 'utf-8');
                $tmp['price'] = $val['price'] ? $val['price'] . '万元' : '';//价格
                $tmp['price'] = mb_convert_encoding($tmp['price'], 'gb2312', 'utf-8');
                $tmp['favorite_num'] = $val['favorite_num'];//关注车位人数
                $tmp['create_time'] = $val['create_time'] ? date('Y-m-d H:i:s', $val['create_time']) : '-';//添加时间

                fputcsv($fp, $tmp);
                unset($tmp);
                ob_flush();
                flush();
            }
        }
        fclose($fp);
        exit();

  导出数据时,留意中文的编码格式,不然导出的中文就是乱码。

  代码不整洁,仅供记录参考,哈哈。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值