Foreach循环JSON获取特定值

时间:2020-03-17 09:44:24

标签: php json foreach

我坐在一个小问题面前。 现在,我创建一个魔兽世界页面,您可以在其中追踪游戏中的多个统计数据。

我正在使用暴雪API,并希望从此json-file中获得特定的价值。 我想,我可以通过一个foreach循环来实现它,该循环正在ID的“成就”树中查找ID“ 13212”,问题是:在“成就”树中,有2000多个编号行,而ID为在,是可变的。因此,我不能这样做。.

  foreach($decodeachieve['achievements'][2207]['id'] as $item) {
        if($item == "13212") {
        //show Achievementpicture 
          }
        }

..因为行[2207]不是静态的并且可以更改。因此,我需要在每2392行“成就”中搜索ID“ 13212”。我如何以目前的方式实现这一目标?当我想在每一行中搜索时,我需要写什么而不是行[2207]。因为它的变量?

感谢您的帮助。 我希望我解释清楚,我的英语不是最好的。

一些JSON示例,如果上面的链接不起作用:

  "achievements": [
{
  "id": 13212,
  "achievement": {
    "key": {
      "href": "https://us.api.blizzard.com/data/wow/achievement/6?namespace=static-8.3.0_32861-us"
    },
    "name": "Level 10",
    "id": 13212
  },
  "criteria": {
    "id": 2050,
    "is_completed": true
  },
  "completed_timestamp": 1313210612000
},
{
  "id": 7,
  "achievement": {
    "key": {
      "href": "https://us.api.blizzard.com/data/wow/achievement/7?namespace=static-8.3.0_32861-us"
    },
    "name": "Level 20",
    "id": 7
  },
  "criteria": {
    "id": 2683,
    "is_completed": true
  },
  "completed_timestamp": 1313215978000
},

2 个答案:

答案 0 :(得分:0)

最简单的方法是将foreach分为两部分:

    foreach($decodeachieve['achievements'] as $achievement) {
        // first go through all achievements
        foreach ($achievement as $item) {
            //then you should be able to filter items
            if ($item !== "13212") {
                continue;
            }
            // do something
        }
    }

编辑:发布json后,似乎更容易了:

foreach($decodeachieve['achievements'] as $achievement) {
      if ($achievement['id'] !== "13212") { // or $achievement['id']['achievement']
            continue;
      }
     // do something
}

答案 1 :(得分:0)

好吧,我得到了@Beniamin的解决方案。

我将您的代码更改为此(杀死了“ continue;”,并将!==更改为==):

        foreach($decodeachieve['achievements'] as $achievement) {
        if ($achievement['id'] == "5266") { // or $achievement['id']['achievement']

        echo "<div class='specialTitles'><img src='https://wow.zamimg.com/images/wow/icons/large/achievement_arena_3v3_7.jpg' style='border-radius: 50%; border: 2px solid #fff; box-shadow: 0px 0px 11px 1px rgba(0,0,0,0.37);'>";
        echo "<div class='document__title'>Dreierbande: 2.400</div></div>";
        }   
}

对我有用。

感谢大家的帮助!

相关问题