1

我是 dota 2 粉丝,我正在尝试使用 Steam Web API,您可以在其中检索比赛历史记录和比赛详情。看看我在 PHP 中的代码。

$json = '{ "result": {
    "players": [
        {
            "account_id": 4294967295, 
            "player_slot": 0,
            "hero_id": 103,           
            "tower_damage": 1259,
            "hero_healing": 263,
            "level": 17,
            "ability_upgrades": [
                {
                    "ability": 5591,
                    "time": 130,
                    "level": 1
                },
                {
                    "ability": 5589,
                    "time": 333,
                    "level": 2
                },
                {
                    "ability": 5591,
                    "time": 454,
                    "level": 3
                }
            ]

        }
    ]}
}';
$obj = json_decode($json, false);

我想打印玩家数组下的值,即 account_id、player_slot、hero_id 等。我在将 json 数组作为对象时遇到了麻烦。我还想打印ability_upgrades 值下的数据,其中 3 个。

4

3 回答 3

1

1)我认为您不需要将json转换为对象,将其转换为数组更简单

$data = json_decode($json, true);

2)然后你可以得到任何部分的数据:

如你所说:

我想打印玩家数组下的值,即 account_id、player_slot、hero_id 等

这很简单:

foreach($data['players'] as $player)
{
   echo "Account id:" . $player['account_id'] . "\n";
   echo "Player's slot:" . $player['player_slot'] . "\n";
   //And other fields...
   echo "Ability upgrades:";
   foreach($player['ability_upgrades'] as $au)
   {
      echo "Ability:" . $au['ability'] . ", time:" . $au['time'] . ", level:";
      echo $au['level'] . "\n";
   }
}
于 2013-08-21T07:38:19.027 回答
1
    $data = json_decode($json, true);
    foreach($data['result']['players'] as $player) {
        // Your code
    }
于 2013-08-21T07:55:45.273 回答
0

如果要将所有对象转换为数组,请使用此函数。

function objectToArray($d){ if(is_object($d)){ $d=get_object_vars($d); } if(is_array($d)){ return array_map(__FUNCTION__, $d); } else{ return $d; } }

以你的例子......如果你打印

$obj = json_decode($json, false);

,为您提供每个节点上的对象。但是这样做之后

$obj = objectToArray(json_decode($json, false));

,使用此函数将所有节点作为数组。所以你可以在for循环中打印所有玩家,或者像这样打印account_id ...

echo $obj['result']['players'][0]['account_id'];
于 2013-08-21T07:53:32.590 回答