我正在尝试在PHP中使用JSON而且我被困了。如果你能帮助我的话,我是新来的。
我想从下面的代码中显示“ list ”中的内容(例如列表,名称和/或frags)。
{
"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'];
}
?>
提前致谢, 吉姆。
答案 0 :(得分:1)
$info['players']['list'][0]['name']
这将为您提供所需的元素。请尝试下次输出$info
以自行查找此错误。
答案 1 :(得分: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'];
}
}
?>
答案 2 :(得分: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";
}
答案 3 :(得分:0)
采取以下数组(我必须更改一些内容)并转到here。将阵列粘贴在左侧,然后按右箭头并在右侧看到阵列的分析。打开树视图,您将意识到列表中有一个0索引。因此,您无法通过执行echo $info['players']['list']['name'];
访问所需内容,但需要应用列表echo $info['players']['list'][0]['name'];
的索引0
[{
"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
}]
答案 4 :(得分:0)
如果将json字符串粘贴到https://jsonlint.com/并单击验证JSON,您将看到有几个语法错误;即port
和queryPort
的值。
纠正后,你应该有这样的事情:
{
"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()
,“计数器”变量和增量。