首页 > 开发 > PHP > 正文

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

2024-05-04 23:33:19
字体:大 中 小
来源:转载
供稿:网友

这篇文章主要介绍了PHP实现CSV文件的导入和导出类,实例分析了php针对csv文件的操作技巧,非常具有实用价值,需要的朋友可以参考下

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

 

 
  1. <?php 
  2. /** 
  3. * CSV 文件处理类 
  4. */ 
  5. class Csv{ 
  6. public $csv_array; //csv数组数据 
  7. public $csv_str; //csv文件数据 
  8. public function __construct($param_arr, $column){ 
  9. $this->csv_array = $param_arr; 
  10. $this->path = $path; 
  11. $this->column = $column; 
  12. } 
  13. /** 
  14. * 导出 
  15. * */ 
  16. public function export(){ 
  17. if(emptyempty($this->csv_array) || emptyempty($this->column)){ 
  18. return false; 
  19. } 
  20. $param_arr = $this->csv_array; 
  21. unset($this->csv_array); 
  22. $export_str = implode(',',$param_arr['nav'])."n"; 
  23. unset($param_arr['nav']); 
  24. //组装数据 
  25. foreach($param_arr as $k=>$v){ 
  26. foreach($v as $k1=>$v1){ 
  27. $export_str .= implode(',',$v1)."n"; 
  28. } 
  29. } 
  30. //将$export_str导出 
  31. header( "Cache-Control: public" ); 
  32. header( "Pragma: public" ); 
  33. header("Content-type:application/vnd.ms-excel"); 
  34. header("Content-Disposition:attachment;filename=txxx.csv"); 
  35. header('Content-Type:APPLICATION/OCTET-STREAM'); 
  36. ob_start();  
  37. // $file_str= iconv("utf-8",'gbk',$export_str); 
  38. ob_end_clean(); 
  39. echo $export_str; 
  40. } 
  41. /** 
  42. * 导入 
  43. * */ 
  44. public function import($path,$column = 3){ 
  45. $flag = flase; 
  46. $code = 0; 
  47. $msg = '未处理'; 
  48. $filesize = 1; //1MB 
  49. $maxsize = $filesize * 1024 * 1024; 
  50. $max_column = 1000; 
  51.  
  52. //检测文件是否存在 
  53. if($flag === flase){ 
  54. if(!file_exists($path)){ 
  55. $msg = '文件不存在'; 
  56. $flag = true; 
  57. } 
  58. } 
  59. //检测文件格式 
  60. if($flag === flase){ 
  61. $ext = preg_replace("/.*.([^.]+)/","$1",$path); 
  62. if($ext != 'csv'){ 
  63. $msg = '只能导入CSV格式文件'; 
  64. $flag = true; 
  65. } 
  66. } 
  67. //检测文件大小 
  68. if($flag === flase){ 
  69. if(filesize($path)>$maxsize){ 
  70. $msg = '导入的文件不得超过'.$maxsize.'B文件'; 
  71. $flag = true; 
  72. } 
  73. } 
  74. //读取文件 
  75. if($flag == flase){ 
  76. $row = 0; 
  77. $handle = fopen($path,'r'); 
  78. $dataArray = array(); 
  79. while($data = fgetcsv($handle,$max_column,",")){ 
  80. $num = count($data); 
  81. if($num < $column){ 
  82. $msg = '文件不符合规格真实有:'.$num.'列数据'; 
  83. $flag = true; 
  84. break; 
  85. } 
  86. if($flag === flase){ 
  87. for($i=0;$i<3;$i++){ 
  88. if($row == 0){ 
  89. break; 
  90. } 
  91. //组建数据 
  92. $dataArray[$row][$i] = $data[$i]; 
  93. } 
  94. } 
  95. $row++; 
  96. } 
  97. } 
  98. return $dataArray; 
  99. } 
  100. } 
  101. $param_arr = array( 
  102. 'nav'=>array('用户名','密码','邮箱'), 
  103. array(0=>array('xiaohai1','123456','xiaohai1@zhongsou.com'), 
  104. 1=>array('xiaohai2','213456','xiaohai2@zhongsou.com'), 
  105. 2=>array('xiaohai3','123456','xiaohai3@zhongsou.com') 
  106. )); 
  107. $column = 3; 
  108. $csv = new Csv($param_arr, $column); 
  109. //$csv->export(); 
  110. $path = 'C:/Documents and Settings/Administrator/Temp/txxx.csv'; 
  111. $import_arr = $csv->import($path,3); 
  112. var_dump($import_arr); 
  113. ?> 

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表