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

如何遍历数组嵌套对象并输出值?PHP循环报错求助

问题解决:遍历游戏封面时出现「Trying to get property of non-object」错误

你遇到的问题根源很明确——$games->cover是单个对象,不是数组,完全不需要用foreach循环去遍历它!

先回看你从API拿到的数据结构:

array (size=1)
  0 => object(stdClass)[2]
    public 'id' => int 1616
    public 'cover' => object(stdClass)[3]  // 这里是单个对象,不是数组
      public 'id' => int 90739
      public 'url' => string '//images.extapi.com/extapi/image/upload/t_thumb/co1y0j.jpg' (length=54)
    public 'name' => string 'Mortal Kombat: Armageddon' (length=25)

你原来的代码里,对$games->cover用了foreach,这会把对象的属性值逐个取出来(第一次循环$cv是整数90739,第二次是URL字符串),这些都是基础数据类型,不是对象,自然没法用->id或->url去访问属性,所以才会抛出「Trying to get property of non-object」的警告。

修正后的代码

直接访问$games->cover的属性即可:

$result = $extAPI->game($options);
foreach($result as $row => $games){
    echo 'ID: ' . $games->id . '<br>';
    echo 'Name: ' . $games->name . '<br>';
    // 直接访问cover对象的属性,无需foreach
    echo 'ID cover: ' . $games->cover->id . '<br>';
    echo 'URL cover: ' . $games->cover->url . '<br>';
}

额外兼容提示

如果API未来有可能返回多个封面(也就是cover变成数组的情况),可以先判断类型再处理,避免以后踩坑:

$result = $extAPI->game($options);
foreach($result as $row => $games){
    echo 'ID: ' . $games->id . '<br>';
    echo 'Name: ' . $games->name . '<br>';
    
    // 先判断cover的类型,再决定是否遍历
    if (is_object($games->cover)) {
        echo 'ID cover: ' . $games->cover->id . '<br>';
        echo 'URL cover: ' . $games->cover->url . '<br>';
    } elseif (is_array($games->cover)) {
        // 当cover是数组时,再用foreach遍历每个封面对象
        foreach ($games->cover as $cv) {
            echo 'ID cover: ' . $cv->id . '<br>';
            echo 'URL cover: ' . $cv->url . '<br>';
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 23:03:11