最近被数据导出搞得够晕的。导出数据只有10W+的数据,但导出一直报内存不够。。。

原思路

1,分页查出数据,然后合并 但是,太消耗内存

新思路

2,分页查出,拼成CSV,追加至CSV文件

以下为逻辑代码

##查出数据
while( $listFlag = $dataObj->fgetlist($data,$params['filter'],$offset) ){
            $offset++;
            if(!$data)break;
            foreach ($data as $k =>$v) {
                $cloumn = [];
                foreach ($dataObj->title as $ki => $vi) {
                    ##转码
                    $v[$ki] = iconv('utf-8', 'gbk', $v[$ki]);
                    ##处理科学计数
                    $cloumn[] = is_numeric($v[$ki])?$v[$ki]."\t":$v[$ki];
                }
                ##追加至文件
                file_put_contents($name, implode(",", $cloumn)."\n",FILE_APPEND);
            }
             $taskModel->update( array('complete_date'=>time(),'step'=>"写入第{$offset}页数据,每页".$dataObj->limit."条"), array('key'=>$params['key']) );
        }