Maison  >  Article  >  php教程  >  PHP 读取/导出 CSV文件

PHP 读取/导出 CSV文件

WBOY
WBOYoriginal
2016-08-04 08:56:181270parcourir

工作中经常会有遇到导入/导出的需求,下面是常用的方法。
读取CSV文件,可以分页读取,设置读取行数,起始行数即可。
导出CSV文件,用两种方法进行实现。

/**<br>  * 读取CSV文件<br>  * @param string $csv_file csv文件路径<br>  * @param int $lines       读取行数<br>  * @param int $offset      起始行数<br>  * @return array|bool<br>  */<br> public function read_csv_lines($csv_file = '', $lines = 0, $offset = 0)<br> {<br>     if (!$fp = fopen($csv_file, 'r')) {<br>         return false;<br>     }<br>     $i = $j = 0;<br>     while (false !== ($line = fgets($fp))) {<br>         if ($i++              continue;<br>         }<br>         break;<br>     }<br>     $data = array();<br>     while (($j++          $data[] = fgetcsv($fp);<br>     }<br>     fclose($fp);<br>     return $data;<br> }<br> <br> <br> /**<br>  * 导出CSV文件<br>  * @param array $data        数据<br>  * @param array $header_data 首行数据<br>  * @param string $file_name  文件名称<br>  * @return string<br>  */<br> public function export_csv_1($data = [], $header_data = [], $file_name = '')<br> {<br>     header('Content-Type: application/octet-stream');<br>     header('Content-Disposition: attachment; filename=' . $file_name);<br>     if (!empty($header_data)) {<br>         echo iconv('utf-8','gbk//TRANSLIT','"'.implode('","',$header_data).'"'."\n");<br>     }<br>     foreach ($data as $key => $value) {<br>         $output = array();<br>         $output[] = $value['id'];<br>         $output[] = $value['name'];<br>         echo iconv('utf-8','gbk//TRANSLIT','"'.implode('","', $output)."\"\n");<br>     }<br> }<br> <br> /**<br>  * 导出CSV文件<br>  * @param array $data        数据<br>  * @param array $header_data 首行数据<br>  * @param string $file_name  文件名称<br>  * @return string<br>  */<br> public function export_csv_2($data = [], $header_data = [], $file_name = '')<br> {<br>     header('Content-Type: application/vnd.ms-excel');<br>     header('Content-Disposition: attachment;filename='.$file_name);<br>     header('Cache-Control: max-age=0');<br>     $fp = fopen('php://output', 'a');<br>     if (!empty($header_data)) {<br>         foreach ($header_data as $key => $value) {<br>             $header_data[$key] = iconv('utf-8', 'gbk', $value);<br>         }<br>         fputcsv($fp, $header_data);<br>     }<br>     $num = 0;<br>     //每隔$limit行,刷新一下输出buffer,不要太大,也不要太小<br>     $limit = 100000;<br>     //逐行取出数据,不浪费内存<br>     $count = count($data);<br>     if ($count > 0) {<br>         for ($i = 0; $i              $num++;<br>             //刷新一下输出buffer,防止由于数据过多造成问题<br>             if ($limit == $num) {<br>                 ob_flush();<br>                 flush();<br>                 $num = 0;<br>             }<br>             $row = $data[$i];<br>             foreach ($row as $key => $value) {<br>                 $row[$key] = iconv('utf-8', 'gbk', $value);<br>             }<br>             fputcsv($fp, $row);<br>         }<br>     }<br>     fclose($fp);<br> }更多【干货分享】,请关注PHP工程师订阅号。
PHP 读取/导出 CSV文件

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:Mysql 事务的四种隔离级别Article suivant:laypage+laytpl示例