Php Foreach循环JSON获取特定值

Php Foreach循环JSON获取特定值,php,json,foreach,Php,Json,Foreach,我坐在一个小问题面前。 现在我创建了一个魔兽世界页面,在这里你可以跟踪游戏中的多个统计数据 我使用暴雪API,希望从中获得一个特定的值。 我想,我可以通过一个foreach循环来实现它,该循环在“成就”树中查找ID“13212”,问题是:在“成就”树中,有2000多个编号行,ID所在的行是可变的。所以我不能那样做 foreach($decodeachieve['achievements'][2207]['id'] as $item) { if($item == "13212"

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

我使用暴雪API,希望从中获得一个特定的值。 我想,我可以通过一个foreach循环来实现它,该循环在“成就”树中查找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
},

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

好的,我找到了解决办法@Beniamin

我将您的代码更改为(取消“继续”;并将!==更改为==):

foreach($decodeAchievent['Achievents']作为$Achievent){
如果($Achatization['id']==“5266”){//或$Achatization['id']['Achatization']
回声“;
echo“德雷班德:2.400”;
}   
}
这对我很管用


谢谢大家的帮助

您没有正确地共享json。我建议你在问题文本中加入一小段内容(最多一行的样本就足够了),而不是通过链接,因为链接可能会断开。我们先循环一下
$decodegate['acgregations]
,然后改为…?@El_Vanja感谢你的反馈。我在其中做了一些json示例。OP添加了json的结构,您只需要对答案进行轻微调整。您需要将$items更改为$item。这对我来说不管用。谢谢各位,顺便说一句。@cpechx我注意到两个级别的id都是一样的。首先,谢谢@Beniamin的努力。遗憾的是,这对我不起作用。我现在在我的帖子中将整个JSON链接为一个链接。现在必须工作,因为这是暴雪官方的json。我想在那个里找到ID 5266,其成就=>名称为“三的公司:2400”。我真的不明白为什么。如果你用"5266"替换"13212",它是否不符合你的要求??
        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>";
        }   
}