我正在尝试从json文件中提取数据,然后在脚本中将其打印出来,我必须创建一个包含服务器状态信息的图像。
这是serverstatus.json中的json数据
[{"load":"high"},{"load":"low"},{"load":"low"},{"load":"low"}]
这是我的剧本
<?php
$url = 'https://api.shipsofwar.net/servers?apikey=hPANE457LsBGmCUCD8JtoX7df44T52rYHJ8Gu0ZU';
$content = file_get_contents($url);
$json = json_decode($content, true);
$image = imagecreatefrompng('status.png');
imagealphablending($image, true);
$fontsize = 20;
$font = 'CaviarDreams';
$color1 = imagecolorallocate($image, 42, 8, 145); //blue
$color2 = imagecolorallocate($image, 30, 50, 98); //light blue
$server[0] = 'PvP One EU';
$server[1] = 'PvE One USA';
$server[2] = 'PvP Two USA';
$server[3] = 'PvP 3 EU mirror';
$ping[0] = '';
$ping[1] = '';
$ping[2] = '';
$ping[3] = '';
//imagefttext("Image", "Font Size", "Rotate Text", "Left Position", "Top Position", "Font Color", "Font Name", "Text To Print");
foreach($json['data'] as $item)
{
//Determine the server status
if($item['status'] == 'working')
{
$color = imagecolorallocate($image, 7, 146, 44);//green
$serverstatus = 'Online';
}
if($item['status'] == 'update')
{
$color = imagecolorallocate($image, 242, 181, 77); //orange
$serverstatus = 'Update';
}
if($item['status'] == 'maintenence')
{
$color = imagecolorallocate($image, 30, 50, 98); //blue
$serverstatus = 'Maintenence';
}
if($item['status'] != ('working' || 'update' || 'maintenence'))
{
$color = imagecoloralolcate($image, 244, 55, 66);//red
$serverstatus = 'Offline';
}
}
foreach($json['data'] as $item2)
{
$load = $item2['load'];
$values[] = array(
'load' => $load,
);
file_put_contents('serverload.json', json_encode($values));
}
$json_file = file_get_contents("serverload.json");
$json_load = json_decode($json_file, true);
foreach ($json_load as $item3)
{
$lat = $item3['load'];
$latency[] = array(
'load' => $lat,
);
$ping = $lat;
}
for($i=0; $i<4; $i++)
{
$name = $server[$i];
imagefttext($image, $fontsize, 0, 20, (20*$i+30)+(20*$i), $color1, $font, $name);
//if($item['status'] != ('update' || 'maintenence'))
//{
imagefttext($image, $fontsize, 0, 260, (20*$i+30)+(20*$i), $color2, $font, $ping[$i]);
//}
imagefttext($image, $fontsize, 0, 340, (20*$i+30)+(20*$i), $color, $font, $serverstatus);
}
header('Content-type: image/png');
imagepng($image);
imagedestroy($image);
?>
我遇到的问题是显示serverstatus.json文件中的信息。我认为我的问题并不完全了解如何从$ lat向$ ping数组添加信息。我试图让它显示的方式如下所示。
PvP One EU high Online
PvE One USA low Online
PvP Two USA low Online
PvP 3 EU mirror low Online
但它显示的却是这样。
PvP One EU l Online
PvE One USA o Online
PvP Two USA w Online
PvP 3 EU mirror Online
我已经尝试了解这几个小时了,我已经尝试了很多东西,但似乎没有什么工作正常。我已经在堆栈上工作了3个小时,现在正在查看与我类似的每个问题,但还没有找到答案,甚至找不到正确答案的线索。任何和所有的帮助表示赞赏。
谢谢。
答案 0 :(得分:0)
每次只需使用以下内容覆盖$ping
变量
$ping = $lat;
但是您应该将$lat
添加为$ping
数组的元素:
foreach ($json_load as $item3)
{
$lat = $item3['load'];
$latency[] = array(
'load' => $lat,
);
$ping[] = $lat; // here, add []
}