Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.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 如何从多维数组中获取数据_Php_Arrays - Fatal编程技术网

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
数组的结构不同,则必须对其进行调整。添加了另一种方法,并使用了较短的变量名