最近被数据导出搞得够晕的。导出数据只有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']) );
}