导入excel
$handle=fopen("1.csv","r"); //将文件一次性全部读出来 $excelData = array(); $content = trim(file_get_contents($fileName)); $excelData = explode("\n",$content);
或者直接用$excelData = file($file); file() 函数直接将数据读出并放入数组当中。
我们先将所有的文件一次性读出来。放到一个数组$excelData 中。这个时候,我们就可以不用管这个csv 文件了,纯粹了php 操作数组了。所以。不会崩溃异常
$chunkData = array_chunk($excelData , 5000); // 将这个10W+ 的数组分割成5000一个的小数组。这样就一次批量插入5000条数据。mysql 是支持的。 $count = count($chunkData); for ($i = 0; $i < $count; $i++) { $insertRows = array(); foreach($chunkData[$i] as $value){ $string = mb_convert_encoding(trim(strip_tags($value)), 'utf-8', 'gbk');//转码 $v = explode(',', trim($string)); $row = array(); $row['cdate'] = empty($v[0]) ? date('Y-m-d') : date('Y-m-d',strtotime($v[0])); $row['business'] = $v[1]; $row['project'] = $v[2]; $row['shopname'] = $v[3]; $row['shopid'] = $v[4]; $row['fanli'] = formatNumber($v[5]); $row['fb'] = $v[6] * 100; $row['jifen'] = $v[7]; $sqlString = '('."'".implode( "','", $row ) . "'".')'; //批量 $insertRows[] = $sqlString; } $result = $model->addDetail($insertRows); //批量将sql插入数据库。 }
批量插入数据库
public function addDetail($rows){ if(empty($rows)){ return false; } //数据量较大,采取批量插入 $data = implode(',', $rows); $sql = "INSERT IGNORE INTO tb_account_detail(cdate,business,project,shopname,shopid,fanli,fb,jifen) VALUES {$data}"; $result = $this->query($sql); return true; }