用于JSON的Foreach数组循环

时间:2015-07-29 23:32:46

标签: php json

这是我的PHP / JSON代码:

$json_url = "http://dailydota2.com/match-api";
$json = file_get_contents($json_url);
$json=str_replace('},
]',"}
]",$json);
$decoded= json_decode($json);
$data=$decoded->matches[0];
foreach ($data as $value) {
print_r($value->team1->logo_url);
}

现在我遇到以下问题

  

注意:尝试获取非对象的属性

  

注意:未定义的属性:stdClass :: $ team1

我只想使用foreach loop,然后以HTML格式显示结果。

为什么我会得到上述两个问题?如何才能显示正确的结果?

2 个答案:

答案 0 :(得分:1)

我已检查过你的代码,并有一些注意事项,希望能找到解决方案:

1-您正试图从JSON数据中获取非现有密钥,这是告诉您的消息。

2-我仍然不确定你从JSON API得到了什么。但对于dailydota2 documentation而言,team1下没有任何名为image_url的东西。我想你正在寻找logo_url或类似的东西。

3-不要像在代码中那样更改JSON的格式,因此请删除以下行:

$json=str_replace('}, ]',"} ]",$json);

将API的主JSON输出保留为默认值。

4-当您尝试从解码的JSON / Array中获取特定密钥时,请使用以下方法:

$data = $decoded->{'matches'};

代替

$data=$decoded->matches[0];

参考:http://php.net/manual/en/function.json-decode.php

5-最后你的foreach loop正在运作但需要正确的密钥:

foreach ($data as $value) {
    print_r($value->team1->logo_url);
}

当所有这些步骤完成后,它应该有效。

以下是您最终更正的代码:

$json_url = "http://dailydota2.com/match-api";
$json = file_get_contents($json_url);
$decoded = json_decode($json);
$data = $decoded->{'matches'};
foreach ($data as $value) {
    print_r($value->team1->logo_url);
    echo '<img src="http://dailydota2.com/' . $value->team1->logo_url . '">';
}

它返回以下输出,我没有收到任何错误。

/images/logos/teams/cdecgaming.png/images/logos/teams/teamempire.png
/images/logos/teams/ehome.png/images/logos/teams/ehome.png
/images/logos/teams/fnatic.png/images/logos/teams/cloud9.png
/images/logos/teams/teamissecret.png/images/logos/teams/teamissecret.png
/images/logos/teams/natusvincere.png/images/logos/teams/fnatic.png

我真的不知道你想从API获得哪些信息,但是你有一个工作代码基础,你可以进一步使用它来从正确的KEY获得所需的数据。

答案 1 :(得分:1)

  1. 好的,所以您使用的网址返回 VALID JSON,无需更改任何内容!
  2. 我建议使用数组,它对我来说总是显得更简单
  3. 您想要来自logo_url的{​​{1}}或来自team的{​​{1}}吗?我将在我的实施中展示。
  4. 所以这里有一些更正的代码

    image_url

    *编辑通过问题作者显示想要的实现...

    league