Php Foreach循环JSON获取特定值
我坐在一个小问题面前。 现在我创建了一个魔兽世界页面,在这里你可以跟踪游戏中的多个统计数据 我使用暴雪API,希望从中获得一个特定的值。 我想,我可以通过一个foreach循环来实现它,该循环在“成就”树中查找ID“13212”,问题是:在“成就”树中,有2000多个编号行,ID所在的行是可变的。所以我不能那样做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"
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>";
}
}