前言:
如题。我们这里说的是csv文件的行数达到10W以上。这个是一个难点。
1. 说说csv 和 Excel
这两者都是我们平时导出或者导入数据一般用到的载体。两者有什么区别呢?csv 格式更兼容一点。那么共同点都是GBK格式的,非UTF8。所以我们上传文件的时候,老是出现乱码,就是编码问题没有转好导致。
2. 推荐的几种方法
1. 函数
fgetss($handel)
; 返回字符串。它就是
strip_tags(fget($handel))
的组合读取csv 文件的一行。去掉了其中的HTML,php 等标签。这种方法使用于小的csv 文件
$handle=fopen("1.csv","r");
while(!feof($handle)){
$buffer=fgetss($handle,2048);
$row = mb_convert_encoding(trim($buffer), 'utf-8', 'gbk'); //很重要。转换成UTF8格式,不然容易产生乱码
$data=explode(",",$row); //转换成数组
$insertRows[] = $data;
} //这样所有的csv文件就生成一个二维数组$insertRows;
2. 函数 fgetcsv($handel,2048,','), 返回数组,它就是 explode(",",fget($handel)) 的组合。这种方法使用于小的csv 文件。而且不适合有汉字的csv 文件。
$handle=fopen("1.csv","r");
while($data=fgetcsv($handle,1000,",")){
$insertRows[] = $data;
} //这样所有的csv文件就生成一个二维数组$insertRows;
$handle=fopen("1.csv","r");
//将文件一次性全部读出来
$excelData = array();
$content = trim(file_get_contents($fileName));
$excelData = explode("\n",$content);
或者直接用$excelData = file($file);
file() 函数直接将数据读出并放入数组当中。
我们先将所有的文件一次性读出来。放到一个数