本文实例讲述了PHP实现CSV文件的导入和导出类。分享给大家供大家参考。具体如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
<?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程序设计有所帮助。