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


Posted in PHP onMarch 24, 2015

本文实例讲述了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 相关文章推荐
php中的登陆login
Jan 18 PHP
PHP5+UTF8多文件上传类
Oct 17 PHP
Php Image Resize图片大小调整的函数代码
Jan 17 PHP
PHP学习之正则表达式
Apr 17 PHP
注册页面之前先验证用户名是否存在的php代码
Jul 14 PHP
PHP中ob_start函数的使用说明
Nov 11 PHP
php结合md5实现的加密解密方法
Jan 25 PHP
PHP使用反射机制实现查找类和方法的所在位置
Apr 22 PHP
PHP自定义函数格式化json数据示例
Sep 14 PHP
浅谈php中变量的数据类型判断函数
Mar 04 PHP
PHP设计模式之PHP迭代器模式讲解
Mar 22 PHP
PHP下用Swoole实现Actor并发模型的方法
Jun 12 PHP
php自定义urlencode,urldecode函数实例
Mar 24 #PHP
PHP数组相关函数汇总
Mar 24 #PHP
PHP递归遍历指定目录的文件并统计文件数量的方法
Mar 24 #PHP
php上传文件并显示上传进度的方法
Mar 24 #PHP
php通过修改header强制图片下载的方法
Mar 24 #PHP
PHP下载远程文件到本地存储的方法
Mar 24 #PHP
php实现encode64编码类实例
Mar 24 #PHP
You might like
Terran兵种介绍
2020/03/14 星际争霸
php定义数组和使用示例(php数组的定义方法)
2014/03/29 PHP
php实现的用户查询类实例
2015/06/18 PHP
js 匿名调用实现代码
2009/06/19 Javascript
Javascript 实现TreeView CheckBox全选效果
2010/01/11 Javascript
JavaScript高级程序设计阅读笔记(十六) javascript检测浏览器和操作系统-detect.js
2012/08/14 Javascript
jQuery里filter()函数与find()函数用法分析
2015/06/24 Javascript
javascript如何写热点图
2015/12/08 Javascript
详解Javascript中的Object对象
2016/02/28 Javascript
Bootstrap每天必学之标签页(Tab)插件
2020/08/09 Javascript
bootstrap PrintThis打印插件使用详解
2017/02/20 Javascript
解决VUE框架 导致绑定事件的阻止冒泡失效问题
2018/02/24 Javascript
vue.js与element-ui实现菜单树形结构的解决方法
2018/04/21 Javascript
js自定义input文件上传样式
2018/10/26 Javascript
JS中的防抖与节流及作用详解
2019/04/01 Javascript
js实现跟随鼠标移动的小球
2019/08/26 Javascript
[01:55]2014DOTA2国际邀请赛 BBC正赛第一天总结
2014/07/10 DOTA
[01:51]2014DOTA2国际邀请赛 这个赛场没有失败者VGTi5再见
2014/07/23 DOTA
python任务调度实例分析
2015/05/19 Python
Python实现完整的事务操作示例
2017/06/20 Python
不可错过的十本Python好书
2017/07/06 Python
对python中两种列表元素去重函数性能的比较方法
2018/06/29 Python
Python爬虫防封ip的一些技巧
2020/08/06 Python
HTML块级标签汇总(小篇)
2016/07/13 HTML / CSS
英国领先的酒类网上商城:TheDrinkShop
2017/03/16 全球购物
巴西男士胡须和头发护理产品商店:Beard
2017/11/13 全球购物
数以千计的折扣工业产品:ESE Direct
2018/05/20 全球购物
佳能法国商店:Canon法国
2019/02/14 全球购物
领先的英国注册在线药房 :Simply Meds Online
2019/03/28 全球购物
高三政治教学反思
2014/02/06 职场文书
建筑施工安全责任书
2014/07/24 职场文书
音乐教师个人工作总结
2015/02/06 职场文书
离婚答辩状范文
2015/05/22 职场文书
地道战观后感400字
2015/06/04 职场文书
如何拟写通知正文?
2019/04/02 职场文书
vue本地构建热更新卡顿的问题“75 advanced module optimization”完美解决方案
2022/08/05 Vue.js