7

何かを Json デコードして、必要な値を取得しようとしています。しかし、PHP undefined index エラーが発生します。これは私のコードです。

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

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

問題は、「[」「]」が私のコードをいじっていることです...私はAPIを使用していくつかの値を取得しています。私が得たものはこれです: http://pastebin.com/XrqkAbJf 私はtotalGamesPlayed、ゼロ(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 に答える