php讀取csv文件數據,大批量寫入數據庫

直接上接口代碼:

public function updateKiwibuyuser(){
        ini_set('memory_limit', '-1');              //PHP內存設置
        $filePath = 'filename.csv';                 // 文件路徑  (要改成自己的路徑)
        $handle=fopen($filePath,"r");              
        $allData = array();
        if (!$handle) {
            exit('讀取文件失敗');
        }
        while (($data = fgetcsv($handle)) !== false) {
            // 下面這行代碼可以解決中文字符亂碼問題
            foreach ($data as $kk => $vv){
                $data[$kk] = iconv('gbk', 'utf-8', $vv);
            }

            // 選擇跳過的行數據,$data[0]每行第一列的名稱,根據自己表格情況寫
            if ($data[0] == '用戶名') {
                continue;
            }

            // data 爲每行的數據
            array_push($allData,$data);
        }
        // 關閉文件
        fclose($handle);

        /********* 數據庫查重操作,看需求是否要忽略 ***************/
        // 讀取數據庫數據,並根據查詢出來的字段,判定是否重複
        $mysqlData = M('tablename')->field('field1')->select();
        $hasData = array();
        $resData = array();
        foreach ($mysqlData as $k1 => $v1){
            array_push($hasData, $v1['field1']);
        }
        foreach ($allData as $k2 => $v2){
            if(in_array($v2[0], $hasData)){
                unset($allData[$k2]);       // 刪除重複數據
            }else{
                array_push($resData, array('field1'=>trim($v2[0]),'field2'=>trim($v2[1])));
            }
        }
        /**********************************************************/

        $chunkData = array_chunk($resData , 500); //每500條數據分一組,(如果不查重操作,請把$resData換成$data,即要添加的數據)
        $count = count($chunkData);
        for ($i = 0; $i < $count; $i++) {
            $res = M('tablename')->addAll($chunkData[$i]);
            if(!$res){
                echo $res;die;
            }
        }
        echo '執行完畢';
    }

有疑問或建議可評論回覆,謝謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章