如何输出 Veezi JSON 子数组?

How to output Veezi JSON subarray?

我正在使用 Veezi API,这是他们的一些 JSON 输出:

[{
    "Id":"ST00000032",
    "Title":"Avatar",
    "People":[
         {
             "Id":"0000000032",
             "FirstName":"Sam",
             "LastName":"Worthington",
             "Role":"Actor"
         },
         {
             "Id":"HO00000176",
             "FirstName":"James",
             "LastName":"Cameron",
             "Role":"Director"
         },
         {
             "Id":"HO00000578",
             "FirstName":"Sigourney",
             "LastName":"Weaver",
             "Role":"Actor"
        }
    ],
    "AudioLanguage":"English"
}]

我正在 PHP 中构建一个字符串,到目前为止($theArray 是我的 JSON 解码数组,这是我的代码:

$allShows .= '<p class="details">With: ';
foreach($theArray['People'] as $key => $value){
    $allShows .= $value->FirstName.' '.$value->LastName.' ('.$value->Role.') <br>';
}
$allShows .= '</p>';

我没有得到任何值,只有 "Role" 周围嵌入的括号。正在返回正确数量的括号,所以我很确定我正在正确循环。谁能发现我的问题?

您可以将整个 json 字符串作为数组处理。如果取消注释我的 var_export() 调用,您会看到该数组以零索引元素开头。

代码:(Demo)

$json='[
{
    "Id":"ST00000032",
    "Title":"Avatar",
    "People":[
         {
             "Id":"0000000032",
             "FirstName":"Sam",
             "LastName":"Worthington",
             "Role":"Actor"
         },
         {
             "Id":"HO00000176",
             "FirstName":"James",
             "LastName":"Cameron",
             "Role":"Director"
         },
         {
             "Id":"HO00000578",
             "FirstName":"Sigourney",
             "LastName":"Weaver",
             "Role":"Actor"
        }
    ],
    "AudioLanguage":"English"    }
]';

//var_export(json_decode($json,true));

$allShows='<p class="details">With: ';
foreach(json_decode($json,true)[0]['People'] as $value){
    $allShows.="{$value['FirstName']} {$value['LastName']} ({$value['Role']})<br>";
}
$allShows.='</p>';
echo $allShows;

输出:

<p class="details">With: Sam Worthington (Actor)<br>James Cameron (Director)<br>Sigourney Weaver (Actor)<br></p>

或者,如果你想使用一组对象,你可以使用这个:

$allShows='<p class="details">With: ';
foreach(json_decode($json)[0]->People as $value){
    $allShows.="{$value->FirstName} {$value->LastName} ({$value->Role})<br>";
}
$allShows.='</p>';
echo $allShows;  // same result

如果这是我的项目,我不希望 </p> 之前的最后一个 <br> 标签,所以我会使用这样的东西:

foreach(json_decode($json)[0]->People as $value){
    $set[]="{$value->FirstName} {$value->LastName} ({$value->Role})";
}
echo '<p class="details">With: ',implode('<br>',$set),'</p>';

输出:

<p class="details">With: Sam Worthington (Actor)<br>James Cameron (Director)<br>Sigourney Weaver (Actor)</p>