1. 程式人生 > >php對csv檔案的常用操作集合

php對csv檔案的常用操作集合

1.CSV的讀取操作

1.<?php 2.$file fopen('D:/file.csv','r'); 3.while ($data fgetcsv($file)) {//每次讀取CSV裡面的一行內容 4.print_r($data); //此為一個數組,要獲得每一個數據,訪問陣列下標即可 5.}     fclose($file);    ?>

2.CSV的寫入操作

1.<?php 2.$fp fopen('d:/file/file.csv''w'); 3.fputcsv($fp,array('aaa','bbb','cccc')); 4.fputcsv
($fp,array('mmm','yyy','haha'));   //fputcsv可以用陣列迴圈的方式進行實現
5.fclose($fp); 6.?>

3.輸出CSV(下載功能)

01.<?php 02.header("Content-Type: text/csv"); 03.header("Content-Disposition: attachment; filename=test.csv"); 04.header('Cache-Control:must-revalidate,post-check=0,pre-check=0'); 05.header('Expires:0'); 06.
header('Pragma:public'); 07.echo "id,areaCode,areaName\n"; 08.echo "1,cn,china\n"; 09.echo "2,us,America\n"; 10.?>

php中解析和生成逗號分隔的資料(CSV資料)

在php中你想把資料格式轉化為逗號分隔的值(Comma-separted values, CSV),以便匯入到電子表格或者資料庫被其他php程式所使用。

首先我們考慮php生成CSV資料,使用fputcsv()函式生成一行CSV格式的資料。看以下的例項:

01.<?php 02.$strs array
(
03.array'php中解析CSV資料''2010-02-01′, 'fputcsv', 'jwork' ), 04.array'php中生成CSV資料''2010-02-01′, 'fgetcsv', 'jwork' ), 05.array'php中使用流操作''2010-02-01′, 'php://output', 'jwork' ) 06.); 07.$fp fopen'str.csv''w' or die'Can\'t open str.csv' ); 08.foreach $strs as $str_line ) { 09.if fputcsv$fp$str_line ) === false ) { 10.die'Can\'t write CSV line.' ); 11.} 12.} 13.fclose( $fp or die'Can\'t close str.csv' ); 14.?>

這個php程式碼寫入檔案str.csv的資料就是CSV資料。
如果想輸出CSV格式的資料而不是將其寫入到一個檔案中,可以使用特殊的輸出流–php://output
例: 將CSV資料存放在一個字串中

01.<?php 02.$strs array( 03.array'php中解析CSV資料''2010-02-01′, 'fputcsv', 'jwork' ), 04.array'php中生成CSV資料''2010-02-01′, 'fgetcsv', 'jwork' ), 05.array'php中使用流操作''2010-02-01′, 'php://output', 'jwork' ) 06.); 07.ob_start(); 08.$fp fopen'w' or die ); 09.foreach$strs as $str_line ) { 10.if fputcsv$fp$str_line ) === false ) { 11.die'Can\'t write CSV line' ); 12.} 13.} 14.fclose( $fp or die ); 15.$output = ob_get_contents(); 16.ob_end_clean(); 17.echo $output;   // $output為CSV資料的字串 18.?>

在php中解析CSV資料,例如,一個由Excel或者資料庫匯出的檔案,想把這些記錄和欄位抽取成一種可以在php處理的資料格式。
如果CSV資料包含在一個檔案中,先用fopen()開啟這個檔案,然後使用fgetcsv()函式讀取其中的資料。
例:php從檔案中讀取CSV資料

01.<?php 02.$fp fopen'sample.csv''r' or die'Can\'t open file' ); 03.// 二維陣列 第一維表示每行資料 第二維表示每行中每個欄位的值 04.$arr array(); 05.while $csv_line fgetcsv$fp ) ) { 06.$arr_tmp array(); 07.for$i = 0; $i count$csv_line ); $i++ ) { 08.$arr_tmp[$i] = $csv_line[$i]; 09.} 10.array_push$arr$arr_tmp ); 11.} 12.print_r( $arr ); 13.?>

在PHP4中,必須為fgetcsv()提供第二個引數,這個引數是一個大於CSV檔案中最大一個行長度的值(行尾的空白符計算在內)。在PHP5 中,這個表示行長度的引數變成了可選擇的。如果不指定這個引數,fgetcsv()函式會度取一整行的資料(在PHP5.0.4及以後的版本中,將此引數 設定為0也會達到同樣的效果)。當平均的行長度超過8192位元組時,如果你指定了一個明確的行長度,而不是讓PHP自己去計算的話,那麼PHP程式執行速 度會加快。

fgetcsv()函式的第三個引數可以使用者替代逗號作為資料的分隔符。不過使用其他的分隔符會令CSV格式作為表列資料交換的一種簡便途徑的效果稍微打一些折扣。

不要試圖繞過fgetcsv()函式,只用讀取一行然後使用explode()按逗號進行解析。CSV的實際情況要比這種方式能夠處理的格式更復 雜,比如說某些欄位值中包含逗號直接量,不應該將欄位中包含的逗號當成是欄位的分隔符。使用fgetcsv()可以保證你和你的PHP程式避免這些不明顯 的錯誤。

如何建立一個CSV檔案

方法1 – 使用HTTP頭

至於在Word和Excel,您需要新增頭資訊到PHP指令碼的例子。

下面的程式碼片斷建立一個指定的表包括其列名CSV檔案。然後會提示使用者下載此檔案。

01.<?php 02.$table 'table_name'; 03.$outstr = NULL; 04.header("Content-Type: application/csv"); 05.header("Content-Disposition: attachment;Filename=cars-models.csv"); 06.$conn = mysql教程_connect("localhost""mysql_user""mysql_password"); 07.mysql_select_db("db",$conn); 08.// Query database to get column names 09.$result = mysql_query("show columns from $table",$conn); 10.// Write column names 11.while($row = mysql_fetch_array($result)){ 12.$outstr.= $row['Field'].','; 13.} 14.$outstr substr($outstr, 0, -1)."n"; 15.// Query database to get data 16.$result = mysql_query("select * from $table",$conn); 17.// Write data rows 18.while ($row = mysql_fetch_assoc($result)) { 19.$outstr.= join(','$row)."n"; 20.} 21.echo $outstr; 22.mysql_close($conn); 23.?> 24. 25.方法2 - 使用fputcsv() 26. 27.fputcsv()函式格式作為CSV行並將其寫入一個開啟的檔案。欲瞭解更多資訊,看 28. 29.一看http://php.net/manual/en/function.fputcsv.php看看。 30. 31.下面的程式碼片斷建立一個指定表的列名,包括CSV檔案,並將其傳送到瀏覽器。 32.[code] 33.<?php 34.$table 'table_name'; 35.$filename = tempnam(sys_get_temp_dir(), "csv"); 36.$conn = mysql_connect("localhost""mysql_user""mysql_password"); 37.mysql_select_db("db",$conn); 38.$file fopen($filename,"w"); 39.// Write column names 40.$result = mysql_query("show columns from $table",$conn); 41.for ($i = 0; $i < mysql_num_rows($result); $i++) { 42.$colArray[$i] = mysql_fetch_assoc($result); 43.$fieldArray[$i] = $colArray[$i]['Field']; 44.} 45.fputcsv($file,$fieldArray); 46.// Write data rows 47.$result = mysql_query("select * from $table",$conn); 48.for ($i = 0; $i < mysql_num_rows($result); $i++) { 49.$dataArray[$i] = mysql_fetch_assoc($result); 50.} 51.foreach ($dataArray as $line) { 52.fputcsv($file,$line); 53.} 54.fclose($file); 55.header("Content-Type: application/csv"); 56.header("Content-Disposition: attachment;Filename=cars-models.csv"); 57.// send file to browser 58.readfile($filename); 59.unlink($filename); 60.?>

[/code]