博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP 读取/导出 CSV文件
阅读量:4955 次
发布时间:2019-06-12

本文共 2781 字,大约阅读时间需要 9 分钟。

工作中经常会有遇到导入/导出的需求,下面是常用的方法。

读取CSV文件,可以分页读取,设置读取行数,起始行数即可。
导出CSV文件,用两种方法进行实现。
1 /** 2  * 读取CSV文件 3  * @param string $csv_file csv文件路径 4  * @param int $lines       读取行数 5  * @param int $offset      起始行数 6  * @return array|bool 7  */ 8 public function read_csv_lines($csv_file = '', $lines = 0, $offset = 0) 9 {10     if (!$fp = fopen($csv_file, 'r')) {11         return false;12     }13     $i = $j = 0;14     while (false !== ($line = fgets($fp))) {15         if ($i++ < $offset) {16             continue;17         }18         break;19     }20     $data = array();21     while (($j++ < $lines) && !feof($fp)) {22         $data[] = fgetcsv($fp);23     }24     fclose($fp);25     return $data;26 }27 /**28  * 导出CSV文件29  * @param array $data        数据30  * @param array $header_data 首行数据31  * @param string $file_name  文件名称32  * @return string33  */34 public function export_csv_1($data = [], $header_data = [], $file_name = '')35 {36     header('Content-Type: application/octet-stream');37     header('Content-Disposition: attachment; filename=' . $file_name);38     if (!empty($header_data)) {39         echo iconv('utf-8','gbk//TRANSLIT','"'.implode('","',$header_data).'"'."\n");40     }41     foreach ($data as $key => $value) {42         $output = array();43         $output[] = $value['id'];44         $output[] = $value['name'];45         echo iconv('utf-8','gbk//TRANSLIT','"'.implode('","', $output)."\"\n");46     }47 }48 /**49  * 导出CSV文件50  * @param array $data        数据51  * @param array $header_data 首行数据52  * @param string $file_name  文件名称53  * @return string54  */55 public function export_csv_2($data = [], $header_data = [], $file_name = '')56 {57     header('Content-Type: application/vnd.ms-excel');58     header('Content-Disposition: attachment;filename='.$file_name);59     header('Cache-Control: max-age=0');60     $fp = fopen('php://output', 'a');61     if (!empty($header_data)) {62         foreach ($header_data as $key => $value) {63             $header_data[$key] = iconv('utf-8', 'gbk', $value);64         }65         fputcsv($fp, $header_data);66     }67     $num = 0;68     //每隔$limit行,刷新一下输出buffer,不要太大,也不要太小69     $limit = 100000;70     //逐行取出数据,不浪费内存71     $count = count($data);72     if ($count > 0) {73         for ($i = 0; $i < $count; $i++) {74             $num++;75             //刷新一下输出buffer,防止由于数据过多造成问题76             if ($limit == $num) {77                 ob_flush();78                 flush();79                 $num = 0;80             }81             $row = $data[$i];82             foreach ($row as $key => $value) {83                 $row[$key] = iconv('utf-8', 'gbk', $value);84             }85             fputcsv($fp, $row);86         }87     }88     fclose($fp);89 }

转载于:https://www.cnblogs.com/zhangjianqiang/articles/7847006.html

你可能感兴趣的文章
SQL SERVER数据库备份时出现“操作系统错误5(拒绝访问)。BACKUP DATABASE 正在异常终止。”错误的解决办法...
查看>>
RESTful设计风格
查看>>
Spring AOP 管理事务
查看>>
MySQL5 LOAD DATA 的使用
查看>>
iOS - AsyncSocket 的使用
查看>>
清华大学计算机系大二 java 小学期考试题(摘自知乎)
查看>>
response.reset()
查看>>
【集结】一些发布出去稿子,外带一些个人的私货(持续更新)
查看>>
Python 28 选课系统的讲解
查看>>
Mysql事务处理
查看>>
写酷“大神”的公开信
查看>>
xml publisher根据条件显示或隐藏列
查看>>
shell 中的 eval 及 crontab 命令
查看>>
.net基础初学Android
查看>>
织梦CMS 忘记后台管理员密码的一种解决方法
查看>>
vue之路由传参
查看>>
Qt Creator插件Todo
查看>>
Linux下Apache配置HTTPS功能
查看>>
Python知乎热门话题爬取
查看>>
2014.01.05php之运算符使用
查看>>