部族API PHP与嵌套JSON问题的冲突
我的PHP加载有问题。我使用PHP调用Clash of Clans API JSON。这是我在JSON中要查找的位置:“氏族”>“成员”>“最佳对手战术” 这是我的PHP部族API PHP与嵌套JSON问题的冲突,php,json,Php,Json,我的PHP加载有问题。我使用PHP调用Clash of Clans API JSON。这是我在JSON中要查找的位置:“氏族”>“成员”>“最佳对手战术” 这是我的PHP <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <?php $clantag = "<CLAN OMITTED>"; $token = "<
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<?php
$clantag = "<CLAN OMITTED>";
$token =
"<TOKEN OMITTED>";
$url = "https://api.clashofclans.com/v1/clans/" . urlencode($clantag) . "/currentwar";
$ch = curl_init($url);
$headr = array();
$headr[] = "Accept: application/json";
$headr[] = "Authorization: Bearer ".$token;
curl_setopt($ch, CURLOPT_HTTPHEADER, $headr);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$res = curl_exec($ch);
$data = json_decode($res, true);
curl_close($ch);
if (isset($data["reason"])) {
$errormsg = true;
}
$members = $data["clan"]["members"];
?>
<title><?php echo $data["clan"]["name"]; ?></title>
</head>
<body>
<?php
if (isset($errormsg)) {
echo "<p>", "Failed: ", $data["reason"], " : ", isset($data["message"]) ? $data["message"] : "", "</p></body></html>";
exit;
}
?>
<table border="1">
<tr>
<td>Map Position</td>
<td>Tag</td>
<td>Name</td>
<td>TH lvl</td>
<td>Opponent Attacks</td>
<td>Best Opponent Attack</td>
</tr>
<?php
foreach ($members as $member) {
?>
<tr>
<td><?php echo $member["mapPosition"]; ?></td>
<td><?php echo $member["tag"]; ?></td>
<td><?php echo $member["name"]; ?></td>
<td><?php echo $member["townhallLevel"]; ?></td>
<td><?php echo $member["opponentAttacks"]; ?></td>
<td><?php echo $member["bestOpponentAttack"]; ?></td>
</tr>
<?php
}
?>
</table>
</body>
</html>
地图位置
标签
名称
第四级
对手攻击
最佳对手攻击
像“标签”、“名称”、“地图位置”、“townhallLevel”、“OpponentTacks”这样的所有东西都显示得很好。当我添加“BestOpponentTack”时,我得到了以下错误:
“注意:第68行C:\xampp\htdocs\index.php中的未定义索引:BestOpponentTack”
我不知道我做错了什么,已经为此工作了几天,不知道为什么我的嵌套JSON返回为未定义。好的,所以PHP中的所有数组都是可移植的;您完全可以foreach
bestopponentatck
:
php > var_dump($bestOpponentAttack);
array(5) {
["order"]=>
int(1)
["attackerTag"]=>
string(3) "abc"
["defenderTag"]=>
string(3) "def"
["stars"]=>
int(3)
["destructionPercentage"]=>
int(100)
}
php > foreach ($bestOpponentAttack as $key=>$value){echo "{$key} : {$value}\n";}
order : 1
attackerTag : abc
defenderTag : def
stars : 3
destructionPercentage : 100
我想第一个问题是,您是否确定bestopponentatck
始终存在于JSON中
如果是这样,下一个问题是$members[0]['bestOpponentAttack']
是一个数组,您试图将其传递给echo
,它只将字符串作为参数。但它提出了一个更大的问题,即您想要的信息在$members[0]['bestOpponentAttack']
内部,而不是$members[0]['bestOpponentAttack']
本身:
["members"]=>
array(1) {
[0]=>
array(7) {
["tag"]=>
string(6) "string"
["name"]=>
string(6) "string"
["mapPosition"]=>
int(0)
["townhallLevel"]=>
int(0)
["opponentAttacks"]=>
int(0)
["bestOpponentAttack"]=>
array(5) {
["order"]=>
int(0)
["attackerTag"]=>
string(6) "string"
["defenderTag"]=>
string(6) "string"
["stars"]=>
int(0)
["destructionPercentage"]=>
int(0)
}...
您已将整个数组委托给单个表单元格,但需要决定如何在单元格中显示该数组的每一条信息,然后适当地访问每一条信息。如果需要,您可以遍历它,或者直接访问该单元格中所需的数据(例如,
$members[0]['bestOpponentAttack']['order']
)。好吧,bestOpponentAttack将是一个assoc数组,您无法分别访问,但您会看到不同的错误。尝试echo print_r($member[“bestopponentatck”],true);而不是echo$member[“BestOpponentTack”];谢谢你的回复。这就是我的新产品线看起来的样子,没错,我想要BestOpponentTack中的产品。它并不总是存在,但它现在就存在,我正在尝试调用$data[“clan”][“members”][“bestOpponentAttack”][“destructionPercentage”]。我只是获取原始输出列表中每个下一个缩进嵌套的标题,但是当我进入[“BestOpponentTack”]时,它没有意识到它的存在。[“destructionPercentage”]是一个0到100的整数。下面是另一个例子,我得到了这个错误:“注意:未定义的索引:C:\xampp\htdocs\index.php中的bestopponentTack在第128行”并且第128行是“行尾指向一个整数,所以echo应该能够打印出来,对吗,我发誓最后一句话:3我发现我正在从BestOpponentTack跳到destructionpercentage,当时我需要调用介于这两者之间的正确数组。攻击的一个有效修复方法是将第128行更改为“”,而不是不带“[0]”。很高兴您能找到答案。该代码并不是针对您的问题的字面解决方案,只是基于答案中给出的示例$members
数组的示例。此外,若不能保证JSON字段将出现,那个么在尝试对它们进行操作之前,最好先在代码中明确检查它们是否存在。是的,将它们视为数组,然后对JSON进行原始转储有助于将其分解。你说的最后一句话帮助最大,因为我不知道你可以用类似“[0]”的东西调用数组。
["members"]=>
array(1) {
[0]=>
array(7) {
["tag"]=>
string(6) "string"
["name"]=>
string(6) "string"
["mapPosition"]=>
int(0)
["townhallLevel"]=>
int(0)
["opponentAttacks"]=>
int(0)
["bestOpponentAttack"]=>
array(5) {
["order"]=>
int(0)
["attackerTag"]=>
string(6) "string"
["defenderTag"]=>
string(6) "string"
["stars"]=>
int(0)
["destructionPercentage"]=>
int(0)
}...