2017-10-10 114 views
-3

我正試圖在PHP中使用JSON,並且我被困住了。我是新來的,如果你能幫助我的話。無法在PHP中顯示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 
} 

這是我使用的代碼(不工作):提前

<?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

'$ info ['players'] ['list']'是一個數組將其更改爲'$ info ['players'] ['list'] [0] ['name']' –

+0

而不是簡單地說「不起作用」,請將錯誤添加到您的問題中。 –

+0

@JamesJones「這是我使用的代碼(不起作用):」這是我的問題。我使用了一個代碼,它不起作用。我不明白你的先生。 – Jim

回答

0

list你會在線用戶記錄的數量,因此可能有單個或多個用戶,所以你必須通過循環,並可以顯示列表中可用的所有記錄。將循環添加到您的代碼中,而不是使用索引顯示單個記錄。

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

你好,謝謝你的幫助。 如果沒有人在線,有什麼方法可以顯示「無」字嗎?再次感謝。 – Jim

+0

@Jim:查看我更新的答案 –

+0

非常感謝! – Jim

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

這會得到你想要的元素。下次嘗試輸出$info以自己查找此錯誤。

0

接下列數組(我不得不改變幾件事),並去here。將數組粘貼到左側,然後按右側箭頭並在右側查看數組的分析。打開樹視圖,你會意識到列表中有一個0索引。所以,你不能訪問你想要做什麼echo $info['players']['list']['name'];,但你需要應用列表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循環的索引0。迭代數組時更清晰。

<?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

如果您貼上您的JSON字符串https://jsonlint.com/並單擊驗證JSON,你會看到,你有幾個語法錯誤的;即值爲portqueryPort

當他們被糾正,你應該有這樣的事情:

{ 
    "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 
} 

既然JSON是固定的,你可以將其轉換爲簡單的處理陣列。

代碼:(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()是不是訴諸for()這將不幸需要count()更好/更清潔的做法,和 「反」 變量,增量。