要求:将用户uid批量导出,并且每5000个放到一个txt文件中,使用英文逗号分隔用户uid; 思路:自定义一个文件夹,在每次导出的时候,先将这个文件夹中的文件删除,之后再重新导出新的文件,使用日期区分是否导出成功;一次性查出满足的所有数据,每5000条存入一个文件,可以使用array_chunk()函数分隔原始数组,之后再使用array_column() 函数取出数组中的uid这一列的数据,最后使用import()函数将uid组合成用英文逗号分隔的字符串,存入txt文件中。 sql查询使用ThinkPHP框架方式。 //批量导出数据并且写入txt文件中 public function export_uids(){ $filepath = $_SERVER['DOCUMENT_ROOT'].'/Uploads/downuids'; //创建目录 $dir = iconv("UTF-8", "GBK", $filepath); if (!file_exists($dir)){ mkdir ($dir,0777,true); } else { //文件已存在,修改权限 chmod($dir, 0777); } //删除文件夹下所有的文件 $this->deldir($filepath); $presell = D('presell'); $map['p.organizationpath'] = array('EXP',"REGEXP '-3-'"); $map['p.classesid'] = array('EXP',"NOT REGEXP '5'"); $map['p.uid'] =array('NEQ',0); $map['u.phone'] =array('NEQ',''); $map['ut.device_token'] =array('NEQ',''); $result = $presell->alias('p')->field("p.uid")->join("LEFT JOIN `user` as u ON p.uid=u.id") ->join("LEFT JOIN `user_tuisong` as ut on ut.uid = u.id") ->where($map) ->order("p.uid asc") ->select(); $res_arr = array_chunk($result,5000);//将数组每5000条数据分一组 $uids_arr = array(); foreach($res_arr as $key => $val){ $uids_arr[$key] = trim(implode(',',array_column($val,'uid'))); } if(!empty($uids_arr) && count($uids_arr) != 0){ //写入到文件 foreach($uids_arr as $key => $val){ $filename = intval($key + 1).'-'.date('Ymd',time()).'.txt'; $fp2 = @fopen($filepath.'/'.$filename, "a"); fwrite($fp2, trim($val)); fclose($fp2); } echo 'success';exit; }else{ echo '没有查询到用户数据';exit; } } //删除文件夹内元素 function deldir($dir) { //删除目录下的文件: $dh=opendir($dir); while ($file=readdir($dh)) { if($file!="." && $file!="..") { $fullpath=$dir."/".$file; if(!is_dir($fullpath)) { unlink($fullpath); } else { $this->deldir($fullpath); } } } closedir($dh); }