【问题标题】:PHP json_decode display into tablePHP json_decode 显示成表格
【发布时间】:2020-03-29 16:05:48
【问题描述】:

此代码应从 JSON 文件中提取,并在表格中显示值,并针对 API 返回的每个 IP 实例进行循环。我没有在表格中显示条目,而是得到一个空白表格。有任何想法吗?

这是使用 Vultr API,如果您想知道那是什么,我用 X 掩盖了我的 SUBID 和 API 密钥。我知道这种方法有效,因为我以前用相同的 API 使用过它。我的理论是我的问题源于 JSON 与 [] 一起返回。

我收到以下 JSON:

{"30953157":[{"ip":"207.148.0.160","netmask":"255.255.254.0","gateway":"207.148.0.1","type":"main_ip","reverse":"brazos.cwservernetwork.com"},{"ip":"144.202.69.201","netmask":"255.255.254.0","gateway":"144.202.68.1","type":"secondary_ip","reverse":"brazos.cwservernetwork.com"}]}

PHP:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>List IP</title>

<meta http-equiv="Content-Style-Type" content="text/css" />
</head>

<body>

    &nbsp;&nbsp;&nbsp;&nbsp;

    <table width="1800px">
        <tr>
            <td colspan="6"><h1><b><u>Listing IPv4</h1></u></b></td>
        </tr>
        <tr>
            <td  style="text-align:center"><b>IPv4</b></td>
            <td  style="text-align:center"><b>Netmask</b></td>
            <td  style="text-align:center"><b>Gateway</b></td>
            <td  style="text-align:center"><b>Type</b></td>
            <td  style="text-align:center"><b>Reverse</b></td>       
        </tr>

    <?php
    $myVultrApiKey="XXXXXXXXXXXXXXXXXXXXXX"; 

    $loadingtime = time();

    $json = file_get_contents("https://api.vultr.com/v1/server/list_ipv4?api_key=$myVultrApiKey&SUBID=XXXXXXXXX");
    $data = json_decode($json);
print $json;

    foreach ($data as $name => $value)  
    { 
    ?>          
            <tr>                    
            <td  style="text-align:center"><?php echo $value->ip; ?></td>
            <td  style="text-align:center"><?php echo $value->netmask; ?></td>
            <td  style="text-align:center"><?php echo $value->gateway; ?></td>
            <td  style="text-align:center"><?php echo $value->type; ?></td>
            <td  style="text-align:center"><?php echo $value->reverse; ?></td>

    <?php
    }//end for  

    ?>
</tr>
<tr>
        <td colspan="2">
                <br><br><br><br><br>
        <?php echo "Load Time: " . "<font color=\"green\">" . (time() - $loadingtime) . "s </font><br />\n"; ?>
        </td>                       
        </tr>
    </table>     

</body>
</html>

【问题讨论】:

  • 你试过 true 作为解码的第二个参数吗?
  • @JasonK OP 使用了正确的对象表示法,所以这不是问题
  • 你能告诉我们print_r($data);的输出吗?
  • 我猜你的循环应该是foreach($data['30953157'] as $name =&gt; $value)
  • Jason:如果我错了,请纠正我,除非它是错误的,否则它不需要那个参数。

标签: php json


【解决方案1】:

问题是您所追求的数据在数据中下降了 1 级。显示数据应该会给你类似...

stdClass Object
(
    [30953157] => Array
        (
            [0] => stdClass Object

由于我不确定30953157 是否已修复,解决方法是将其转换为数组并使用array_values() 删除此键,然后访问元素[0]...

foreach (array_values((array)$data)[0] as $name => $value)

应该这样做。

或来自https://stackoverflow.com/a/18526290/1213708

foreach (reset($data) as $name => $value)

【讨论】:

  • 这太完美了!谢谢!
【解决方案2】:

导致问题的原因是 JSON 字符串开头的“30953157”。

试试

foreach ($data->{30953157} as $name => $value) { ... }

【讨论】:

  • 太棒了!有一件事,那一串数字可以改变,但我想我可以在那里插入一个变量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多