[英]PHP json_decode display into table
此代碼應從 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>
<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>
導致問題的原因是 JSON 字符串開頭的“30953157”。
嘗試
foreach ($data->{30953157} as $name => $value) { ... }
問題是您所追求的數據在數據中低了 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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.