2017-10-10 6 views
-3

私はPHPでJSONを使用しようとしています。私はこれで新しくなっています。もしあなたがそれを手伝ってくれるなら、私は助かります。JSONデータをPHPに表示できません

リスト」のコンテンツを下記のコードから表示したいとします(例:リスト、名前、または脆弱性など)。

{ 
    "status": true, 
    "hostname": "{IP}", 
    "port": {PORT}, 
    "queryPort": {PORT}, 
    "name": "Cod2 Server", 
    "map": "mp_genesisarc", 
    "secured": true, 
    "password_protected": false, 
    "version": "1.3", 
    "protocol": "udp", 
    "players": { 
     "online": 1, 
     "max": "28", 
     "list": [ 
      { 
       "frags": "1", 
       "ping": "54", 
       "name": "Mr Anderson" 
      } 
     ] 
    }, 
    "cached": false 
} 

これは(動作しない)私が使用するコードです:事前に

<?php 
$serverip = "localhost"; 
$info = json_decode(file_get_contents('https://use.gameapis.net/cod2/query/info/000.000.00.0:0000'.$serverip), true); 
if(!$info['status']) { 
    echo 'Offline'; 
} else { 
    echo $info['players']['list']['name']; 
} 
?> 

おかげで、 ジム。

+1

$情報['players'] ['list'] 'は配列です$ info ['players'] ['list'] [0] ['name']' –

+0

単純に言っているのではなく「うまくいかない」というエラーが表示された場合は、質問にエラーを追加してください。 –

+0

@JamesJones "これは私が使用するコードです(動作しません):"これは私の問題です。私はコードを使用し、それは動作しません。私はあなたのことを理解していません。 – Jim

答えて

0

listあなたはオンラインユーザーレコードの数になりますので、1人または複数のユーザーがいることがありますので、ループを通過しなければならず、リスト内のすべてのレコードを表示できます。インデックス付きの単一レコードを表示するのではなく、コードにforループを追加します。

if(count($info['players']['list']) > 0){ 
    for($cnt = 0; $cnt < count($info['players']['list']); $cnt++){ 
     echo $info['players']['list'][$cnt]['name']; 
    } 
} else { 
    echo "Write your message"; 
} 
+0

こんにちは、ご協力いただきありがとうございます。 オンラインで誰もいない場合、 "none"のような単語を表示する方法はありますか?再度、感謝します。 – Jim

+0

@Jim:更新された回答を確認してください –

+0

ありがとうございました! – Jim

1
$info['players']['list'][0]['name'] 

これで目的の要素が得られます。次にエラー$infoを出力してみてください。

0

次の配列(私はいくつかの変更が必要でした)とhereに行きました。左側に配列を貼り付け、次に右側の矢印を押して、右側に配列の分析を表示します。ツリービューを開き、リストに0のインデックスがあることを認識します。だから、echo $info['players']['list']['name'];を行うことで、あなたが望むものにアクセスすることはできませんが、リストのインデックス0 echo $info['players']['list'][0]['name'];

[{ 
    "status": true, 
    "hostname": "{IP}", 
    "port": 555, 
    "queryPort": 555, 
    "name": "Cod2 Server", 
    "map": "mp_genesisarc", 
    "secured": true, 
    "password_protected": false, 
    "version": "1.3", 
    "protocol": "udp", 
    "players": { 
     "online": 1, 
     "max": "28", 
     "list": [ 
      { 
       "frags": "1", 
       "ping": "54", 
       "name": "Mr Anderson" 
      } 
     ] 
    }, 
    "cached": false 
}] 
1

を適用する必要がありforeachループを使用してみてください。配列を反復処理するときにはよりクリーンです。

<?php 
$serverip = "localhost"; 
$info = json_decode(file_get_contents('https://use.gameapis.net/cod2/query/info/000.000.00.0:0000'.$serverip), true); 

if(!$info['status']) { 
    echo 'Offline'; 
} 
else { 
    foreach ($info['players']['list'] as $player) { 
     echo $player['name']; 
    } 
} 
?> 
0

あなたがhttps://jsonlint.com/にあなたのJSON文字列を貼り付けると検証JSONをクリックした場合、あなたは構文エラーのカップルを持っていることがわかります。つまり、portqueryPortの値です。

それらが修正された場合、あなたはこのようなものが必要です:今、JSONが固定されていることを

{ 
    "status": true, 
    "hostname": "{IP}", 
    "port": "{PORT}", 
    "queryPort": "{PORT}", 
    "name": "Cod2 Server", 
    "map": "mp_genesisarc", 
    "secured": true, 
    "password_protected": false, 
    "version": "1.3", 
    "protocol": "udp", 
    "players": { 
     "online": 1, 
     "max": "28", 
     "list": [{ 
      "frags": "1", 
      "ping": "54", 
      "name": "Mr Anderson" 
     }] 
    }, 
    "cached": false 
} 

を、あなたは簡単な処理のために配列に変換することができます。

コード:(Demo

$serverip="localhost"; 
$array=json_decode(file_get_contents('https://use.gameapis.net/cod2/query/info/000.000.00.0:0000'.$serverip),true); 
if(!isset($array['status']) || $array['status']===false){ 
    echo 'Offline'; 
}else{ 
    foreach($array['players']['list'] as $players){ 
     echo "<div>Name: {$players['name']}, Frags: {$players['frags']}, Ping: {$players['ping']}</div>\n"; 
    } 
} 

foreach()は残念ながらcount()が必要になるfor()に頼るよりも良い/クリーナー実践、および "カウンタ" 変数、および増分です。

関連する問題