如何遍历数组嵌套对象并输出值?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
相关产品推荐
相关产品推荐

