You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP解析API返回的JSON数组:如何迭代获取全部分页结果?

当然有办法搞定这个需求!这种分页遍历获取全量数据的场景太常见了,我给你整理一套实用的实现方案,附带代码示例,你可以直接套用:

核心实现思路
  1. 先拿全局分页信息:先调用一次API(默认page=1),拿到返回里的totalPages(总页数),这是我们循环的终止条件,明确要遍历到第几页。
  2. 循环拉取每一页数据:从第1页开始,一直循环到totalPages对应的页码,每次请求对应页的results,把所有结果合并到一个数组里。
  3. 容错处理(可选但推荐):比如请求失败时跳过或重试,避免因为某一页请求失败导致整个流程中断。
代码示例(以PHP为例,适配你的数组结构)
<?php
// 准备好你的API地址
$apiBaseUrl = "https://your-api-endpoint.com/data";
// 用来存所有结果的数组
$allResults = [];

// 第一步:请求第一页,获取总页数
$firstPageResponse = file_get_contents($apiBaseUrl);
if (!$firstPageResponse) {
    die("初始请求失败,请检查API地址或网络连接");
}
$firstPageData = json_decode($firstPageResponse, true);
$totalPages = $firstPageData['totalPages'];

// 先把第一页的结果加进去
$allResults = array_merge($allResults, $firstPageData['results']);

// 第二步:循环遍历剩下的页面(从第2页到最后一页)
for ($currentPage = 2; $currentPage <= $totalPages; $currentPage++) {
    // 构造带page参数的请求地址
    $pageUrl = "{$apiBaseUrl}?page={$currentPage}";
    $pageResponse = file_get_contents($pageUrl);
    
    if (!$pageResponse) {
        echo "第{$currentPage}页请求失败,跳过该页\n";
        continue;
    }
    
    $pageData = json_decode($pageResponse, true);
    // 合并当前页的结果到全局数组
    $allResults = array_merge($allResults, $pageData['results']);
    
    // 可选:如果API有速率限制,加个延迟避免被封
    // sleep(1);
}

// 大功告成!现在allResults里就是所有页面的完整数据了
echo "总共获取到 " . count($allResults) . " 条数据\n";
?>
额外注意事项
  • 速率限制:如果你的API有请求频率限制,一定要在循环里加延迟(比如sleep(1)),不然容易被临时封禁。
  • 异步优化:如果数据量很大(比如几十上百页),同步循环会比较慢,可以用异步请求库(比如Guzzle的并发请求)来批量拉取,提升效率。
  • 数据校验:每次请求后可以核对返回的page值是否和你请求的一致,避免API返回错误页码的数据,影响结果完整性。

内容的提问来源于stack exchange,提问作者Kodiak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:18:56