我目前正在使用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"]; 但我发现它并不总是起作用,因为统计数据的顺序可能不同。
我希望你们能理解我的问题并帮助我!
提前致谢,对不起我的英语,我来自荷兰。
拉斯
答案 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);