现在我正在使用此请求从json API(battle.net)中提取数据
https://us.api.battle.net/wow/realm/status?locale=en_US&realms=runetotem&apikey=xxxxxxxxxxxxxxx
有意隐藏API密钥,返回以下内容
{
"realms": [{
"type": "pve",
"population": "medium",
"queue": false,
"wintergrasp": {
"area": 1,
"controlling-faction": 1,
"status": 0,
"next": 1433468324674
},
"tol-barad": {
"area": 21,
"controlling-faction": 1,
"status": 2,
"next": 1433465638814
},
"status": true,
"name": "Runetotem",
"slug": "runetotem",
"battlegroup": "Vengeance",
"locale": "en_US",
"timezone": "America/Los_Angeles",
"connected_realms": ["uther", "runetotem"]
}]
}
我使用php将数据放入数组,然后尝试在if语句中调用所述数组中的值,但是对于我的检查,if语句始终为true。我根本不明白为什么,如果有人可以请求帮助,那就太棒了。代码如下。
<?php
$json_url = "https://us.api.battle.net/wow/realm/status?locale=en_US&realms=runetotem&apikey=xxxxxxxxxxx";
$json = file_get_contents($json_url);
$data = json_decode($json, TRUE);
?>
<tr class="latestthreads_portal">
<td width="230px" class="trow3">
<strong>Realm Status</strong>
<span class="smalltext"><br />
<?php if ($data['realms'][0]['status'] == 2)
{
echo "up";
}
else{
echo "Down?";
}
?>
<br />
<br /> <div class="border"></div>
</span>
</td>
</tr>
请原谅蹩脚的格式化。
答案 0 :(得分:2)
我认为你有比较问题和数据嵌套问题。在我看来,你在php中将if (2 == true)
评估为true
。
http://php.net/manual/en/types.comparisons.php
此外,您只是检查&#34;领域的状态&#34;数组,而不是&#34; tol-barad&#34;和&#34; wintergrasp&#34;对象,不确定你想要什么,确切。
答案 1 :(得分:1)
查看您提供的JSON,看起来$data['realms'][0]['status']
的值为true
。
所以,你的if语句将进行类型杂耍以使双方都成为布尔值,(bool)2
为真,因此条件将始终匹配。
答案 2 :(得分:0)
$data['realms'][0]['status'] == 2
而不是
$data['realms']['wintergrasp']['status'] == 2
根据评论进行编辑:
if ($data['realms']['status'] == 2)
答案 3 :(得分:0)
在PHP中合并不同类型时,请使用===
代替==
。总是。三个等号意味着'它是否具有识别性?'两个等号意味着'这是等同的吗?'