在从json文件中提取的数组中的数据中显示for循环中的信息

时间:2016-03-17 19:06:39

标签: php arrays json foreach

我正在尝试从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个小时,现在正在查看与我类似的每个问题,但还没有找到答案,甚至找不到正确答案的线索。任何和所有的帮助表示赞赏。

谢谢。

1 个答案:

答案 0 :(得分:0)

每次只需使用以下内容覆盖$ping变量

$ping = $lat;

但是您应该将$lat添加为$ping数组的元素:

foreach ($json_load as $item3)
{
    $lat = $item3['load'];
    $latency[] = array(
        'load' => $lat,
    );

    $ping[] = $lat;    // here, add []
}