Php 如何从多维数组中获取数据
(完整粘贴箱:) 我试图从一个(长的)多维数组中选择数据,但是我尝试了所有的东西,页面显示为空白。我正在尝试使用名称而不是列表中的排名来访问数据Php 如何从多维数组中获取数据,php,arrays,Php,Arrays,(完整粘贴箱:) 我试图从一个(长的)多维数组中选择数据,但是我尝试了所有的东西,页面显示为空白。我正在尝试使用名称而不是列表中的排名来访问数据 { "playerstats": { "steamID": "76561198035223060", "gameName": "ValveTestApp260", "stats": [ { "name": "total_kills",
{
"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']代码>而不是数字
提前感谢。一种方法是更改创建阵列的方式,如下所示:
{
"playerstats": {
"steamID": "76561198035223060",
"gameName": "ValveTestApp260",
"stats":
{
"total_kills": 38694,
"total_deaths": 33362,
"total_time_played": 2148546,
...
}
然后只需通过$kills=$jsonforgame['playerstats']['stats']['total_kills']访问即可,您可以选择以下方式:
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。如果您无法更改数组,您也可以尝试
$specs = array("total_kills", "total_deaths", "total_time_played"); // and so on
foreach ( $specs as $spec )
$$spec = $jsonforgame['playerstats']['stats'][ $spec ]['value'];
之后,您可以按名称使用每个规范,例如$total\u 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;
}
$count=count($jsonforgame['playerstats']['stats']);
对于($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;
}
$specs=array(
“总杀数”=>“杀数”,
“总死亡人数”=>“死亡人数”,
“总播放时间”=>“播放时间”,
); // 等等
$count=count($jsonforgame['playerstats']['stats']);
对于($i=0;$i<$count;$i++){
$name=$specs[$jsonforgame['playerstats']['stats'][$i]['name']];
$value=$jsonforgame['playerstats']['stats'][$i]['value'];
$$name=$value;
}
在uou可以通过键名获取数据之后,您必须转换为带有json_decode的数组。我已经在这里这样做了:$jsonforgame=json_decode($STREAMSTATSFORGAMERESULT,true);那么输出是什么呢?如何获得$SteamStatsForGameResult?你能分享完整的代码让我们看看你在尝试什么吗?为什么不使用foreachI?我用cURL获取数据,所以不可能更改数组结构使用此时我的页面显示为空白,没有错误消息,进行了一次小的编辑,忘了你正在转换为数组,not stdClassNow我打印出一个错误:注意:尝试获取第64行的D:\XAMPP\htdocs\site\csgo\stats.php中非对象的属性,再次编辑以方便出现一个可能的问题,但我恐怕在没有看到数据和代码的情况下无法做更多的事情。再次编辑,以排列当我尝试此操作时,它给了我一个没有错误的空白页:(那么您的数据一定有所不同。我添加了一个示例。如果您的$jsonforgame
数组的结构不同,则必须对其进行调整。添加了另一种方法,并使用了较短的变量名