php操作csv文件代码实例汇总
1.读取csv数据,输出到sales.csv文件中:
$sales=array(
array('Northeast','2004-01-01','2004-02-01',12.54),
array('Northwest','2004-01-01','2004-02-01',546.33),
array('Southeast','2004-01-01','2004-02-01',93.26),
array('Southwest','2004-01-01','2004-02-01',945.21),
array('AllRegions','---','--',1597.34),
);
$fh=fopen('sales.csv','w')ordie("Can'topensales.csv");
foreach($salesas$sales_line){
if(fputcsv($fh,$sales_line)===false){
die("Can'twriteCSVline");
}
}
fclose($fh)ordie("Can'tclosesales.csv");
2.读取csv数据,使用特殊的流输出
$sales=array(
array('Northeast','2004-01-01','2004-02-01',12.54),
array('Northwest','2004-01-01','2004-02-01',546.33),
array('Southeast','2004-01-01','2004-02-01',93.26),
array('Southwest','2004-01-01','2004-02-01',945.21),
array('AllRegions','---','--',1597.34),
);
$fh=fopen('php://output','w');
foreach($salesas$sales_line){
if(fputcsv($fh,$sales_line)===false){
die("Can'twriteCSVline");
}
}
fclose($fh);
3.读取csv数据,输出到缓冲中
$sales=array(
array('Northeast','2004-01-01','2004-02-01',12.54),
array('Northwest','2004-01-01','2004-02-01',546.33),
array('Southeast','2004-01-01','2004-02-01',93.26),
array('Southwest','2004-01-01','2004-02-01',945.21),
array('AllRegions','---','--',1597.34),
);
ob_start();
$fh=fopen('php://output','w')ordie("Can'topenphp://output");
foreach($salesas$sales_line){
if(fputcsv($fh,$sales_line)===false){
die("Can'twriteCSVline");
}
}
fclose($fh)ordie("Can'tclosephp://output");
$output=ob_get_contents();
ob_end_clean();
4.读取csv文件的数据
$fp=fopen('sample3.csv','r')ordie("can'topenfile");
print"<table>\n";
while($csv_line=fgetcsv($fp)){
print'<tr>';
for($i=0,$j=count($csv_line);$i<$j;$i++){
//print'<td>'.htmlentities($csv_line[$i]).'</td>';
print'<td>'.htmlentities(iconv("gb2312","utf-8",$csv_line[$i])).'</td>';
}
print"</tr>\n";
}
print"</table>\n";
fclose($fp)ordie("can'tclosefile");
5.下载CSV文件
$sales=array(
array('Northeast','2004-01-01','2004-02-01',12.54),
array('Northwest','2004-01-01','2004-02-01',546.33),
array('Southeast','2004-01-01','2004-02-01',93.26),
array('Southwest','2004-01-01','2004-02-01',945.21),
array('中国','2004-01-01','2004-02-01',945.21),
);
$fh=fopen('php://output','w')ordie("can'topenphp://output");
$total=0;
//告诉浏览器发送的是一个csv文件
header('Content-Type:application/csv');
header('Content-Disposition:attachment;filename="sales.csv"');
//输出表头
fputcsv($output,array('Region','StartDate','EndDate','Amount'));
//输出每一行数据,并递增$total
foreach($salesas$sales_line){
if(fputcsv($fh,$sales_line)===false){
die("Can'twriteCSVline");
}else{
$total+=$sales_line[3];
}
}
fputcsv($fh,array('AllRegions','--','--',$total));
fclose($fh)ordie("Can'tclosephp://output");
6.读取CSV文件指定行和区间行
/*****读取CSV文件中的指定行*****/
functionget_file_line_a($file_name,$line){
$n=0;
$handle=fopen($file_name,'r');
if($handle){
while(!feof($handle)){
++$n;
$out=fgets($handle,4096);
if($line==$n)break;
}
fclose($handle);
}
if($line==$n)return$out;
returnfalse;
}
echoget_file_line("windows_2011_s.csv",10);//输入第10行内容
/*****读取CSV文件中的区间行*****/
functionget_file_line_b($file_name,$line_star,$line_end){
$n=0;
$handle=fopen($file_name,"r");
if($handle){
while(!feof($handle)){
++$n;
$out=fgets($handle,4096);
if($line_star<=$n){
$ling[]=$out;
}
if($line_end==$n)break;
}
fclose($handle);
}
if($line_end==$n)return$ling;
returnfalse;
}
//用get_file_line读取并输出第11行到第20行
$aa=get_file_line("windows_2011_s.csv",11,20);//从第11行到第20行
foreach($aaas$bb){
echo$bb."<br>";
}