Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php JSON数组作为对象_Php_Json_Api_Steam - Fatal编程技术网

Php JSON数组作为对象

Php JSON数组作为对象,php,json,api,steam,Php,Json,Api,Steam,我是dota 2的粉丝,我正在Steam Web API上进行实验,在这里可以检索匹配历史记录和匹配详细信息。看看我的PHP代码 $json = '{ "result": { "players": [ { "account_id": 4294967295, "player_slot": 0, "hero_id": 103, "tower_damage":

我是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);
我想打印玩家数组下的值,这些值是帐户id、玩家插槽、英雄id等等。我在json数组作为对象时遇到问题。我还想打印3个值下的数据。

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

$data = json_decode($json, true);
2) 然后你可以得到任何部分的数据:

正如你所说:

我想打印玩家数组下的值,这些值是帐户id、玩家插槽、英雄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";
   }
}

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

函数对象阵列($d){
if(is_object($d)){
$d=获取对象变量($d);
}
if(is_数组($d)){
返回数组映射(uuu函数,$d);
}
否则{
返回$d;
}
}

以你为例。。。 如果你打印

$obj = json_decode($json, false);
,为您提供每个节点上的对象。 但是在这样做之后

$obj = objectToArray(json_decode($json, false));
,使用此函数将所有节点作为数组获取。 所以你可以打印循环中的所有玩家,或者像这样打印帐号

echo $obj['result']['players'][0]['account_id'];

为什么不使用数组呢?更容易。。。
    $data = json_decode($json, true);
    foreach($data['result']['players'] as $player) {
        // Your code
    }