[英]How to get data from multi dimensional array
(完整的pastebin: https : //pastebin.com/C4qV5YYv )
我正在尝试从(长)多维数组中选择数据,但是尝试了所有尝试后,页面仅显示为空白。 我正在尝试使用名称而不是其在列表中的排名访问数据。
{
"playerstats": {
"steamID": "76561198035223060",
"gameName": "ValveTestApp260",
"stats": [
{
"name": "total_kills",
"value": 38694
},
{
"name": "total_deaths",
"value": 33362
},
{
"name": "total_time_played",
"value": 2148546
},
{
"name": "total_planted_bombs",
"value": 770
},
{
"name": "total_defused_bombs",
"value": 271
},
{
"name": "total_wins",
"value": 12394
}, So on and so on......
我当前正在使用它从数组中获取数据: $kills = $jsonforgame['playerstats']['stats'][0]['value'];
当您只需要几个值时,此方法有效,但是当我需要进一步选择值时,它会变得非常整洁。 $hit = $jsonforgame['playerstats']['stats'][47]['value'];
无论如何,我是否可以选择名称如下的统计信息: $hit = $jsonforgame['playerstats']['stats']['total_shots_fired']['value'];
而不是数字。
提前致谢。
您可能会喜欢这样的东西:
function getStat($data, $name)
{
return array_filter($data, function($item) use ($name) {
return $item && $item['name'] === $name;
})[0]['value'];
}
$hit = getStat($jsonforgame['playerstats']['stats'], 'total_shots_fired');
但是更有效的方法是更改您的stats api,以便在可能的情况下提供键值对ofc。
一种方法是这样更改数组的创建方式:
{
"playerstats": {
"steamID": "76561198035223060",
"gameName": "ValveTestApp260",
"stats":
{
"total_kills": 38694,
"total_deaths": 33362,
"total_time_played": 2148546,
...
}
然后只需通过$ kills = $ jsonforgame ['playerstats'] ['stats'] ['total_kills']访问
如果您无法更改数组,也可以尝试
$specs = array("total_kills", "total_deaths", "total_time_played"); // and so on
foreach ( $specs as $spec )
$$spec = $jsonforgame['playerstats']['stats'][ $spec ]['value'];
之后,您可以按名称使用每个规范,例如$total_kills
如果要使用较短的变量名,可以像这样更改代码
$specs = array(
"kills" => "total_kills",
"died" => "total_deaths",
"played" => "total_time_played"
); // and so on
foreach ( $specs as $key => $spec )
$$key = $jsonforgame['playerstats']['stats'][ $spec ]['value'];
echo $kills; // output $jsonforgame['playerstats']['stats']['total_kills']['value']
另一种方法
$count = count($jsonforgame['playerstats']['stats']);
for ( $i = 0; $i < $count; $i++ ) {
$name = $jsonforgame['playerstats']['stats'][ $i ]['name'];
$value = $jsonforgame['playerstats']['stats'][ $i ]['value'];
$$name = $value;
}
并使用带有较短变量名的数组
$specs = array(
"total_kills" => "kills",
"total_deaths" => "died",
"total_time_played" => "played",
); // and so on
$count = count($jsonforgame['playerstats']['stats']);
for ( $i = 0; $i < $count; $i++ ) {
$name = $specs[ $jsonforgame['playerstats']['stats'][ $i ]['name'] ];
$value = $jsonforgame['playerstats']['stats'][ $i ]['value'];
$$name = $value;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.