PHP实现CSV文件的导入和导出类

5年以前  |  阅读数:472 次  |  编程语言:PHP 

本文实例讲述了PHP实现CSV文件的导入和导出类。分享给大家供大家参考。具体如下:


    <?php
    /**
     * CSV 文件处理类
     */
    class Csv{
      public $csv_array; //csv数组数据
      public $csv_str; //csv文件数据
      public function __construct($param_arr, $column){
        $this->csv_array = $param_arr;
        $this->path = $path;
        $this->column = $column;
      }
      /**
       * 导出
       * */
      public function export(){
        if(empty($this->csv_array) || empty($this->column)){
          return false;
        }
        $param_arr = $this->csv_array;
        unset($this->csv_array);
        $export_str = implode(',',$param_arr['nav'])."n";
        unset($param_arr['nav']);
        //组装数据
        foreach($param_arr as $k=>$v){
          foreach($v as $k1=>$v1){
            $export_str .= implode(',',$v1)."n";
          }
        }
        //将$export_str导出
        header( "Cache-Control: public" );
        header( "Pragma: public" );
        header("Content-type:application/vnd.ms-excel");
        header("Content-Disposition:attachment;filename=txxx.csv");
        header('Content-Type:APPLICATION/OCTET-STREAM');
        ob_start();   
       // $file_str= iconv("utf-8",'gbk',$export_str);
        ob_end_clean();
        echo $export_str;
      }
      /**
       * 导入
       * */
      public function import($path,$column = 3){
        $flag = flase;
        $code = 0;
        $msg = '未处理';
        $filesize = 1; //1MB
        $maxsize = $filesize * 1024 * 1024;
        $max_column = 1000;

        //检测文件是否存在
        if($flag === flase){
          if(!file_exists($path)){
            $msg = '文件不存在';
            $flag = true;
          }
        }
        //检测文件格式
        if($flag === flase){
          $ext = preg_replace("/.*.([^.]+)/","$1",$path);
          if($ext != 'csv'){
            $msg = '只能导入CSV格式文件';
            $flag = true;
          }
        }
        //检测文件大小
        if($flag === flase){
          if(filesize($path)>$maxsize){
            $msg = '导入的文件不得超过'.$maxsize.'B文件';
            $flag = true;
          }
        }
        //读取文件
        if($flag == flase){
          $row = 0;
          $handle = fopen($path,'r');
          $dataArray = array();
          while($data = fgetcsv($handle,$max_column,",")){
            $num = count($data);
            if($num < $column){
              $msg = '文件不符合规格真实有:'.$num.'列数据';
              $flag = true;
              break;
            }
            if($flag === flase){
              for($i=0;$i<3;$i++){
                if($row == 0){
                  break;
                }
                //组建数据
                $dataArray[$row][$i] = $data[$i];
              }
            }
            $row++;
          }
        }
        return $dataArray;
      }
    }
    $param_arr = array(
    'nav'=>array('用户名','密码','邮箱'),
    array(0=>array('xiaohai1','123456','xiaohai1@zhongsou.com'),
       1=>array('xiaohai2','213456','xiaohai2@zhongsou.com'),
       2=>array('xiaohai3','123456','xiaohai3@zhongsou.com')
    ));
    $column = 3;
    $csv = new Csv($param_arr, $column);
    //$csv->export();
    $path = 'C:\Documents and Settings\Administrator\Temp\txxx.csv';
    $import_arr = $csv->import($path,3);
    var_dump($import_arr);
    ?>

希望本文所述对大家的php程序设计有所帮助。

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例