导入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;  
    }  

 

posted @ 2017-09-01 18:09  天局  阅读(71)  评论(0编辑  收藏  举报