php 匯入/匯出 csv 檔案

來源:互聯網
上載者:User

標籤:ref   each   obj   中文字元   有一個   integer   ram   亂碼問題   編碼   

php 匯入/匯出 csv 檔案

1、簡介

項目開發中,很多時候要將外部CSV檔案匯入到資料庫中或者將資料匯出為CSV檔案,那麼具體該如何?呢?本文將使用原生PHP,實現了CSV格式資料的匯入和匯出功能。並解決相關亂碼問題。

將xls轉換成csv的文字格式設定,然後再用php分析這個檔案,和PHP分析文本沒有什麼區別。
優點:跨平台,效率比較高、可以讀寫。
缺點:只能直接使用csv的檔案,如果經常接受.xls二進位檔案的話需要手工轉換,不能自動化。一個檔案只有一個SHEET。

 

2、相關函數介紹

2.1、fgetcsv

參考:http://www.w3school.com.cn/php/func_filesystem_fgetcsv.asp

 

2.2、fputcsv

參考:http://www.w3school.com.cn/php/func_filesystem_fputcsv.asp

2.3、fopen

參考:http://www.w3school.com.cn/php/func_filesystem_fputcsv.asp

2.4、iconv

參考:http://php.net/manual/fr/function.iconv.php

本次大致會使用以上4個函數,實現csv檔案的匯入匯出

3、如何匯出csv檔案

註:預設匯出是utf8編碼,需要對字串進行轉碼,excel 開啟檔案預設是gbk編碼,所以utf8匯出在txt檔案開啟是正常,在excel開啟是亂碼

3.1、測試utf8匯出

匯出的資料格式

 

$head = array(‘編號‘,‘姓名‘,‘年齡‘,‘出生年月‘);$data = array(array(‘001‘,‘zs‘,10,‘1991-1-1‘),array(‘002‘,‘李四‘,10,‘1991-1-1‘),array(‘003‘,‘王五‘,10,‘1991-1-1‘),);$obj->putCsv(‘putCsv.csv‘, $data, $head);
匯出的方法:
class Excel{/** * [putCsv description] * @param  string  $csvFileName [description] 檔案名稱 * @param  array   $dataArr     [description] 數組,每組資料都是使用,分割的字串 * @param  string  $haderText   [description] 標題(預設第一行) * @param  integer $line        [description] 從第幾行開始寫 * @param  integer $offset      [description] 共計寫幾行 * @return [type]               [description] */public function putCsv($csvFileName, $dataArr ,$haderText = ‘‘, $line = 0, $offset = 0){$handle = fopen($csvFileName,"w");//寫方式開啟if(!$handle){return ‘檔案開啟失敗‘;}//判斷是否定義頭標題if(!empty($haderText)){$re = fputcsv($handle,$haderText);//該函數返回寫入字串的長度。若出錯,則返回 false。。}foreach ($dataArr as $key => $value) {$re = fputcsv($handle,$value);//該函數返回寫入字串的長度。若出錯,則返回 false。。}}}
運行結果:
找到產生的csv檔案,先使用記事本開啟;
編碼和內容都正常,唯一的不足就是沒有自動換行;
在使用excel開啟
因為excel預設開啟是gbk編碼,所以亂碼,可以使用記事本改編碼為ANSI格式

 

3.2、提前對中文進行轉碼匯出

 

 

<?phpclass Excel{/** * [putCsv description] * @param  string  $csvFileName [description] 檔案名稱 * @param  array   $dataArr     [description] 數組,每組資料都是使用,分割的字串 * @param  string  $haderText   [description] 標題 * @return [type]               [description] */public function putCsv($csvFileName, $dataArr ,$haderText = ‘‘){$handle = fopen($csvFileName,"w");//寫方式開啟if(!$handle){return ‘檔案開啟失敗‘;}//判斷是否定義頭標題if(!empty($haderText)){foreach ($haderText as $key => $value) {$haderText[$key] = iconv("utf-8","gbk//IGNORE",$value);//對中文編碼進行處理}$re = fputcsv($handle,$haderText);//該函數返回寫入字串的長度。若出錯,則返回 false。。}foreach ($dataArr as $key => $value) {foreach ($value as $k => $v) {$value[$k] = iconv("utf-8","gbk//IGNORE",$v);//對中文編碼進行處理}$re = fputcsv($handle,$value);//該函數返回寫入字串的長度。若出錯,則返回 false。。}}}
匯出結果:
這樣處理,不管在txt文本還是excel中都是正常的。不會出現亂碼

 

4、匯入csv檔案

匯入csv檔案也需要對中文進行轉碼處理

 

/** * [getCsv description]  匯出csv檔案 * @param  string  $csvFileName [description] 檔案名稱 * @param  integer $line        [description] 讀取幾行,預設全部讀取 * @param  integer $offset      [description] 從第幾行開始讀,預設從第一行讀取 * @return [type]               [description] */public function getCsv($csvFileName, $line = 0, $offset = 0){$handle = fopen($csvFileName,‘r‘);//開啟檔案,如果開啟失敗,本函數返回 FALSE。if(!$handle){return ‘檔案開啟失敗‘;}//fgetcsv() 出錯時返回 FALSE,包括碰到檔案結束時。$i = 0;//用於記錄while的迴圈次數,方便與$line,$offset比較$arr = array();//結果的存放數組while($data = fgetcsv($handle)){//小於位移量則不讀取,但$i仍然需要自增if($i < $offset && $offset){$i++;continue;}//大於讀取行數則退出if($i > $line && $line){break;}$i++;foreach ($data as $key => $value) {$content = iconv("gbk","utf-8//IGNORE",$value);//轉化編碼$arr[] = $content;//至於如何處理這個結果,需要根據實際情況而定}}return $arr;}

 

csv匯入資料是一格一格讀取,所以在處理過程中相對麻煩,需要提前知道一行有幾列,因為是測試,所以沒有對結果進行特殊的處理。

5、總結

 

注意匯入和匯出的過程中,遇到中文字元一定要記得轉碼,否則可能會出現中文亂碼的情況。
csv檔案的匯入匯出相對於xls檔案操作容易。
原文地址:http://www.cnblogs.com/ImCehnyx/p/7198139.html

php 匯入/匯出 csv 檔案

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.