glory-jzx
<?php
class exportCsv{

     //列名
     protected  $_column = array();
     protected  $_reg  = array();
     public     $ret = "";
     
     public function setColumn($colunms){
        
          foreach ($colunms as $k => $colunm){
              $this->_column[$k] = $colunm[\'title\'];
              $this->_reg[$k][\'reg\'] = $colunm[\'reg\'];
              $this->_reg[$k][\'colunm\'] = $colunm[\'name\'];
          }
          return $this;
     }
     
     public function bulidData($data){
     
          $this->ret = implode(",", $this->_column);
         foreach($data as $k=>$dat){
             if(!empty($this->_reg)){
                  $dat = call_user_func_array(array($this, \'doFilter\') , array($dat));
             }
            $this->ret .= " \n".implode(",", $dat);
         }
     }
     
     public function transport($name="default"){
         header("Content-Disposition: attachment; filename={$name}.csv");
         header("Content-Type:APPLICATION/OCTET-STREAM");
         $bomHeader = pack(\'H*\',\'EFBBBF\');   //将bom头转换二进制放在所有字符顶部,可以解决office Excel打开是乱码的问题
         die($bomHeader.$this->ret);
     }
     
     private function doFilter($data){
         
         foreach($this->_reg as $k =>$fun){
            if( $data[$fun[\'colunm\']] && method_exists($this,$fun[\'reg\'])){
               $data[$fun[\'colunm\']] = $this->$fun[\'reg\']($data[$fun[\'colunm\']]);
            }
         }
         return $data;
     }
     
     //格式化时间戳
     private function dataFormate($timestamp){
         return date("Y-m-d",$timestamp);
     }
     //去除换行
     private function htmlFormate($content){
        return str_replace(array("\n","\t\n"), array(" "," "), $content);
     }
}

 

使用方法:

$columnArr = array(
               0=>array(\'title\'=>\'ID\',\'name\'=>\'cid\'),
               array(\'title\'=>\'用户名\',\'name\'=>\'uid\'),
               array(\'title\'=>\'评论内容\',\'name\'=>\'comments\',\'reg\'=>\'htmlFormate\'),
               array(\'title\'=>\'评分\', \'name\'=>\'satisfaction\', \'reg\' =>\'int\'),
               array(\'title\'=>\'商品编码\', \'name\'=>\'goods_sn\', \'reg\' =>\'int\'),
               array(\'title\'=>\'添加时间\',\'name\'=>\'add_time\',\'reg\'=>\'dataFormate\'),
               array(\'title\'=>\'审核状态\',\'name\'=>\'status\')
           );
           import ( "@.ORG.exportCsv" );
           $csvModel = new exportCsv();
           $csvModel->setColumn($columnArr);
           set_time_limit(0);
           $comments =  $model->table(\'mall_comments mc\')->where($map)->field(\'cid,uid,comments,satisfaction,goods_sn,add_time,status\')->select();
           $csvModel->bulidData($comments);

 

分类:

技术点:

相关文章: