为什么这个PHP条件总是正确的?

时间:2015-06-05 01:01:57

标签: php arrays json variables if-statement

现在我正在使用此请求从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>

请原谅蹩脚的格式化。

4 个答案:

答案 0 :(得分:2)

我认为你有比较问题和数据嵌套问题。在我看来,你在php中将if (2 == true)评估为truehttp://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中合并不同类型时,请使用===代替==。总是。三个等号意味着'它是否具有识别性?'两个等号意味着'这是等同的吗?'