ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
``` //分批次处理数据 public function test(){ for ($i=1; $i<=10; $i++){ $userList[] = [ 'name' => "姓名{$i}", 'age' => '年龄'.($i+18), ]; } $this->exec($userList, 3); } /** * 分批次处理 * @param $userList 待处理的数据 * @param int $batchNums 每次处理的条数 */ public function exec($userList, $batchNums = 2){ $count = count($userList); $page = ceil($count/$batchNums); //注意这里不能改成 ($i = 1; $i<=$page; $i++),因为array_slice起始位置和index是有联系的 for($i = 0; $i<$page; $i++){ $index = $i * $batchNums; $newData = array_slice($userList, $index, $batchNums); $this->limitExec($newData); } } //处理list数据 public function limitExec($list){ var_export($list); } ``` 假设每次循环获取5条数据 ``` //方法一:(数据量大的后面查询速度会变慢 limit 10000,5) $flag = true; $limit = 0; while($flag){ $sql = "select id,name from table limit {$limit} , 5"; $data = $db->select($sql); //todo 你的逻辑 if(!$data){//数据为空,直接停止循环 $flag = false; break; } $limit += 5;//每次获取后面5条,直至数据查询为空. } //方法二: $id = 0; $limit= 5; while(true){ $sql = "select id,name from table where id > {$id} limit {$limit}"; $data = $db->select($sql); if(!$data){ break; } //todo 你的逻辑 if(count($data)<$limit){ break; } $id = $data[$limit-1]['id'];//获取最后一次查询的Id用于下次对比 } ``` ``` $start = 0; while($data = select * from table limit $start, 100) { print_r($chunk); $start += 100; } ```