7

我正在尝试 Json 解码某些东西并获得我想要的值。但我得到 PHP 未定义的索引错误。这是我的代码。

<?php
$json = '[{"totalGamesPlayed":25,"championId":0}]';
$data = json_decode($json,true); 

$games = $data['totalGamesPlayed'];
echo $games;
?>

问题是“[”“]”弄乱了我的代码......我正在使用 API 来获取一些值。我得到的是:http : //pastebin.com/XrqkAbJf 我需要总GamesPlayed,除了零(82,106 和 24)之外的冠军 ID 以及这些 ID 的 TOTAL_SESSIONS_WON 和 TOTAL_SESSIONS_LOST ......首先,让我们看看如何我绕过了“[”和“]”符号,然后事情可能会更容易..提前谢谢你!

4

3 回答 3

5

像这样访问您的代码

$games = $data[0]['totalGamesPlayed'];

获取其他信息的代码

<?php

$json = 'PUT YOUR EXAMPLE JSON HERE';
$data = json_decode($json,true); 

$seasonWon = 0;
$seasonPlayed = 0;
foreach($data as $stats) {
    if($stats['championId'] != 0) {
        echo '<br><br>Total Games Played:'. $stats['totalGamesPlayed'];    
        echo '<br>champion Ids :'.$stats['championId'];
        foreach($stats['stats'] as $stat) {
            if($stat['statType'] == 'TOTAL_SESSIONS_WON') {
                $seasonWon = $stat['value'];
                echo '<br>TOTAL_SESSIONS_WON :'.$seasonWon;
            }

            if($stat['statType'] == 'TOTAL_SESSIONS_LOST')
            echo '<br>TOTAL_SESSIONS_LOST :'.$stat['value'];

            if($stat['statType'] == 'TOTAL_SESSIONS_PLAYED') {                
                $seasonPlayed = $stat['value'];
                echo '<br>TOTAL_SESSIONS_PLAYED :'.$seasonPlayed;                
            }
        }
        echo '<br>Games Ratio(TOTAL_SESSIONS_WON / TOTAL_SESSIONS_PLAYED): ('. $seasonWon.'/'.$seasonPlayed.'):'. ($seasonWon/$seasonPlayed);
    }
}
于 2012-12-02T06:15:55.217 回答
2

如果遇到像您这样的问题,可以方便地查看您的解码数据的真实情况。所以与其盲目阅读,不如用print_r()var_dump()看。print_r($data);会输出:

Array
(
    [0] => Array
        (
            [totalGamesPlayed] => 25
            [championId] => 0
        )
)

因此正确的“路径”是:

$games = $data[0]['totalGamesPlayed'];

之所以如此,是因为您的 JSON 对象是数组(JSON 的第一个和最后一个字符是[and ]),对象作为数组节点({/ }),而您的实际值是该对象的成员。您可以通过检查为什么首先以这种方式构造 JSON 来解决这个问题(也许代码允许更多的数组元素),或者“提取”对象以摆脱被迫[0]在引用中使用:

$data = $data[0];
$games = $data['totalGamesPlayed'];

print_r($data)会给出:

Array
(
    [totalGamesPlayed] => 25
    [championId] => 0
)

并且您以前的代码将开始工作:

$games = $data['totalGamesPlayed'];
echo $games;

25
于 2012-12-02T08:16:09.697 回答
1

你试试这个:

$games = $data[0]['totalGamesPlayed'];

问题是你的 json 是一个数组,它的第一个元素是一个对象

于 2012-12-02T06:17:14.193 回答