程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了PHP 在不知道数据数量的情况下循环遍历 JSON 数据大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决php 在不知道数据数量的情况下循环遍历 JSON 数据?

开发过程中遇到php 在不知道数据数量的情况下循环遍历 JSON 数据的问题如何解决?下面主要结合日常开发的经验,给出你关于php 在不知道数据数量的情况下循环遍历 JSON 数据的解决方法建议,希望对你解决php 在不知道数据数量的情况下循环遍历 JSON 数据有所启发或帮助;

我正在尝试从图像 API 获取所有图像。它一次最多返回 500 个结果,如果结果有 next_page 字段,那么我必须获取该字段的值并将其添加到 URL。代码应该继续循环直到该字段不存在。我使用以下代码抓取前两页:

$key = true;
$link = 'https://url.com/dhj/?prefix=images&type=download';
$Json = file_get_contents($link);
$data = Json_decode($Json,truE);
$dataArray = array();
foreach ($data["images"] as $r)
{
    array_push($dataArray,array($r["ID"],$r["image"]));
}
while($key)
{
    if($data["next_page"])
    {
        $key=true;
        $link2 = "https://url.com/dhj/?prefix=images&type=download&next_page=" . $data[$next_page];
        $Json2 = file_get_contents($link2);
        $data2 = Json_decode($Json2,truE);
        foreach ($data2["images"] as $r2)
        {
            array_push($dataArray,array($r2["ID"],$r2["image"]));
        }
    }
    else
    {
        $key=false;
    }
}

这应该获取 2000 条记录,但只获取 1000 条记录,因此循环似乎没有按预期工作。

解决方法

所以你的问题是你只取了两次。第二次,你永远不会检查下一页的 $data2,所以一切都停止了。您不想继续这样下去,否则您将需要$data3$data4 等。

do/while 循环类似于 while 循环,不同之处在于它始终至少运行一次。在循环结束而不是开始时评估条件。您可以使用该行为来确保始终获得第一页数据,然后使用条件检查是否应该继续获得更多数据。

$page = "";
do {
    $link = "https://url.com/dhj/?prefix=images&type=download&next_page=$page";
    $json = file_get_contents($link);
    $data = json_decode($json,truE);
    foreach ($data["images"] as $r) {
        $dataArraY[] = [$r["id"],$r["image"]];
    }
    $page = $data["next_page"] ?? "";
} while ($pagE);

注意我已经摆脱了你的 array_push() 电话。这在 php 中很少使用,因为 $var[] 语法不那么冗长并且不需要预先声明数组。同样,对 array() 的调用早已被数组文字语法的使用所取代。 表达式 $page = $data["next_page"] ?? "" 使用空合并运算符,并且等同于:

if (isset($data["next_page"])) {
    $page = $data["next_page"];
} else {
    $page = "";
}

大佬总结

以上是大佬教程为你收集整理的PHP 在不知道数据数量的情况下循环遍历 JSON 数据全部内容,希望文章能够帮你解决PHP 在不知道数据数量的情况下循环遍历 JSON 数据所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。