2 回答
TA贡献1963条经验 获得超6个赞
根据 json_decode 的文档,如果您使用将返回数组的第二个参数“TRUE”:
https://www.php.net/manual/en/function.json-decode.php
因此,无需使用 (array) json_decode($response, TRUE) 进行类型转换。以下会很好:
$json_array = json_decode($response, TRUE);
其次,当我将您在上面提供的响应剪切并粘贴到 IDE 中时,它会随着全部退出而损坏。根据我上面提供的文档链接,响应应该具有如下结构:
array(1) {
[1]=>
array(2) {
["English"]=>
array(2) {
[0]=>
string(3) "One"
[1]=>
string(7) "January"
}
["French"]=>
array(2) {
[0]=>
string(3) "Une"
[1]=>
string(7) "Janvier"
}
}
}
获取一个 JSON 字符串(开始时格式正确)并将其解码为一个数组将始终看起来像这样。您的回复没有,这让我相信(没有看到)您的 $response 实际上不是格式正确的 JSON。
编辑:
在下面的评论中查看我的评论。但这里的底线是你试图在 JSON 上进行 foreach。这里没有什么可寻找的。它将被放入数组中的 JSON 数据。无需调教就可以调出这些钥匙,您将成为金色!
聊天后:
OP 和我聊了聊,最后得到了这个超级嵌套的 foreach 循环:
$decoded = json_decode( $json, TRUE );
foreach ( $decoded['categories'] as $category ) {
foreach ( $category as $subcat ) {
if ( is_array( $subcat ) ) {
foreach ( $subcat as $s ) {
foreach ( $s as $tiles ) {
foreach ( $tiles as $tile ) {
foreach ( $tile as $t ) {
// Do stuff
}
}
}
}
} else {
echo $subcat;
}
}
}
TA贡献1817条经验 获得超14个赞
因为你的 json 字符串很麻烦,你可以试试这个代码:
$str=""; // your json string
$date = date("Y/m/d");
$json_array = json_decode($str, true);
foreach($json_array['bannerTiles'] as $json)
{
if(isset($json['webSearchUrl'])) echo "<br>Web URL: ". $json['webSearchUrl']."<br>";
echo "<b>"."Published on: ".$date."<br>";
if(isset($json['displayText'])) echo "<b>Title: ".$json['displayText']."<br>";
}
foreach($json_array['categories'] as $categories_1)
{
foreach($categories_1 as $categories_2)
{
foreach($categories_2 as $categories_3)
{
foreach($categories_3['tiles'] as $tile)
{
if(isset($tile['query'])) echo "<br>Web URL: ". $tile['query']['webSearchUrl']."<br>";
echo "<b>"."Published on: ".$date."<br>";
if(isset($tile['query'])) echo "<b>Title: ".$tile['query']['displayText']."<br>";
if(isset($tile['image']))
{
echo "<b>"."<img class='img-responsive' src =".$tile['image']
['thumbnailUrl']."></a><br>";
}
if(isset($tile['query'])) echo $tile['query']['text'];
}
}
}
}
- 2 回答
- 0 关注
- 239 浏览
添加回答
举报