JSON获得价值

时间:2016-05-11 17:16:20

标签: json

我目前正在使用Steam API,但并非一切都按照应有的方式进行。

JSON文件的(第一部分)如下所示:

{
"playerstats": {
    "steamID": "XXXXXXXXXXXX",
    "gameName": "ValveTestApp260",
    "stats": [
        {
            "name": "total_kills",
            "value": 4910
        },
        {
            "name": "total_deaths",
            "value": 3691
        },
        {
            "name": "total_time_played",
            "value": 280969
        }, 

我想使用名称访问总杀戮的值;这是因为每个玩家的统计数据顺序不同,这意味着我不能使用[0]或[1]。

我已经有解码部分:

$csgo = json_decode(file_get_contents($apiurl_csgo), true);

但是现在我需要通过检查' thingy'的名称来访问总杀戮值。 (不知道它叫什么)等于" total_kills"。

之前我使用过$ cs_kills = $ csgo [" playerstats"] [" stats"] [0] [" value"]; 但我发现它并不总是起作用,因为统计数据的顺序可能不同。

我希望你们能理解我的问题并帮助我!

提前致谢,对不起我的英语,我来自荷兰。

拉​​斯

2 个答案:

答案 0 :(得分:0)

你可以使用foreach:

<?
$json_string='{"playerstats":{"steamID": "XXXXXXXXXXXX","gameName":"ValveTestApp260","stats":[{"name":"total_kills","value":4910},{"name":"total_deaths","value": 3691},{"name": "total_time_played", "value": 280969}]}}';
$obj=json_decode($json_string);
foreach ($obj->playerstats->stats as &$value) {
    if($value->name == 'total_kills'){
        echo $value->value;
        // Do somethig with value
    }
}
?>

答案 1 :(得分:0)

你必须获得你想要的数据:

$total_kills = 0;
foreach($csgo["playerstats"]["stats"] as $stat) {
   if($stat['name'] == 'total_kills') {
     $total_kills = $stat['value'];
     break;
   }
}

数组缩减(为了好玩)

$total_kills = array_reduce($csgo['playerstats']['stats'],function($carry,$stat) {
  return $carry ? $carry : ($stat['name'] == 'total_kills' ? $stat['value'] : $carry);
},0);