PHP中使用CSV导出数据的方法

之前到做数据导出这个功能的时候,发现如果使用PHPExcel进行数据导出的吧,数据量过大,就没有办法导出了,后来使用导出的文件后缀格式为.csv就没有问题了。下面写一下我的方法总结吧:

<?php
namespace Home\Controller;
use Think\Controller;

class CheckController extends PublicController
{
    /*
     * 封装的csv导出数据的方法
     * 文件名$fileName
     * $headArr 字段名
     * 需要导出的数据数据 $data
     * */
    private  function getCSV($fileName,$headArr,$data){
        $date = date("Y_m_d",time());
        $fileName .= "_{$date}.csv";
        $fileName = iconv("utf-8", "gb2312", $fileName);     

        header('Content-Type: Content-type:text/csv');
        header("Content-Disposition: attachment;filename=\"$fileName\"");
        header('Cache-Control: max-age=0');

        $fp = fopen('php://output', 'a');

        // 将数据通过fputcsv写到文件句柄
        fputcsv($fp, $head);

        fputcsv($fp, $headArr);

        // 计数器
        $cnt = 0;
        // 每隔$limit行,刷新一下输出buffer,不要太大,也不要太小
        $limit = 100000;

        $count = count($data);

        for($t=0;$t<$count;$t++) {

            $cnt ++;
            if ($limit == $cnt) { //刷新一下输出buffer,防止由于数据过多造成问题
                ob_flush();
                flush();
                $cnt = 0;
            }
            $row = $data[$t];
            foreach ($row as $i => $v) {
                $row[$i] = iconv('utf-8', 'gbk', $v);
            }//
            fputcsv($fp, $row);
            unset($row);
        }
        //下面使用案例
         //导出用户数据数据方法
    public function epiexport()
    {
          $Model = M('userinfo');
          $map['Status']=1;
         $userinfolist = $Model->where($map)->select();
        //用户表数据
        $alldata = array();
        foreach ($userinfolist as $k=>$val) {
            $alldata[$k]['Number'] = $val['number'];
            $alldata[$k]['DocuDate'] = $val['docudate'];
            $alldata[$k]['Name'] = $val['name'];
            $alldata[$k]['Sex'] = $val['sex'] == 1 ? '男' : '女';
            $alldata[$k]['Birth'] = $val['birth'];
            $alldata[$k]['Nation'] = $val['nation'];
            $alldata[$k]['FatherName'] = $val['fathername'];
            $alldata[$k]['FatherPhoneNo'] = $val['fatherphoneno'];
            $alldata[$k]['MotherName'] = $val['mothername'];
            $alldata[$k]['MotherPhoneNo'] = $val['motherphoneno'];
            $alldata[$k]['Address'] = $val['address'];
            $alldata[$k]['School'] = $val['school'];
            $alldata[$k]['SchoolType'] = $val['schooltype'];
            $alldata[$k]['ClassName'] = $val['classname'];
            $alldata[$k]['AddTime'] =date('Y-m-d',$val['addtime']);
            $alldata[$k]['Lost']=$val['lost'];
            $alldata[$k]['inquiryopen'] = $val['inquiryopen'];
        }
            $headArr=array_keys($alldata[$k]);
            $filename="epidata";
            $this->getCSV($filename,$headArr,$alldata);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值