【问题标题】:Foreach Loop JSON get specific valueForeach 循环 JSON 获取特定值
【发布时间】:2020-06-28 09:05:53
【问题描述】:

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

我使用暴雪 API 并希望从这个json-file 中获得特定的价值。 我想,我可以通过在“成就”树中查找 ID“13212”的 foreach 循环来实现它,问题是:在“成就”树中,有超过 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
},

【问题讨论】:

  • 您没有正确共享 json。我建议您在问题的文本中包含一小段摘录(最多单行的示例就足够了),而不是通过链接,因为链接可能会损坏。
  • 那么循环遍历$decodeachieve['achievements'] 然后...?
  • @El_Vanja 感谢您的反馈。我在其中做了一些示例 json。

标签: php json foreach


【解决方案1】:

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

我将您的代码更改为这个(杀死“继续;”并将!== 更改为 ==):

        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>";
        }   
}

这对我有用。

感谢您的帮助@所有人!

【讨论】:

    【解决方案2】:

    最简单的方法就是将 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
    }
    

    【讨论】:

    • OP增加了json的结构,你只需要对你的答案稍作调整。
    • 您需要将$item 更改为$item。这对我的自动取款机不起作用。
    • 谢谢大家,顺便说一句。 @cpechx 我注意到两个级别的 id 相同
    • 首先,感谢@Beniamin 的努力。可悲的是,这对我不起作用。我现在在我的帖子中链接了整个 JSON 作为链接。现在必须工作,因为它是官方的暴雪 json。我想在那里找到 ID 5266,成就=>名称“三公司:2400”。
    • 不太明白为什么。如果您将“13212”替换为“5266”,它不符合您的要求?
    猜你喜欢
    • 1970-01-01
    • 2019-12-05
    • 2020-02-12
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 2020-09-16
    • 2016-04-29
    相关资源
    最近更新 更多