使用php从json结果中提取项目(项目不止一次出现)

时间:2017-07-16 23:14:49

标签: php json youtube-data-api

我目前正在尝试从我在youtube上创建的播放列表中提取标题和视频ID。

我正在使用youtube api v3以json格式获取播放列表结果。

我可以提取我需要的信息,但由于某种原因,结果没有按预期回复。

例如,我在此播放列表上有三个视频作为测试,当我查看json结果时,它还列出了3个项目。

但是,当我使用以下代码列出项目时,前两个项目每行连续4次列出,最后一项列出一次。

P.S我遗漏了$url,因为这不是我问题的原因。

$result77 = file_get_contents($url);
$YTapiJSON = json_decode($result77, TRUE);
foreach ($YTapiJSON['items'] as $key){
    foreach ($key as $key2) {
        foreach ($key2 as $key3) { 
            $title = $key2['title'];
            $key4 = $key2['resourceId']['videoId'];
        }
        if(!empty($key4)) {
            echo $title. "Added " .$key4. "<br>";
        } 
    }
}

1 个答案:

答案 0 :(得分:0)

而不是这么多的foreach循环,我使用了几个array_column()这样的调用:(Demo

$titles=array_column(array_column(json_decode($json,true)['items'],'snippet'),'title');
var_export($titles);

首先将json转换为数组,然后访问items子数组,然后收集snippet子数组,然后从中收集title个值。

输出:

array (
  0 => 'test title 1',
  1 => 'test title 2',
  2 => 'test title 3',
)

如果您想要titlevideoId,那么您可以使用此代码:

$snippets=array_column(json_decode($json,true)['items'],'snippet');
foreach($snippets as $a){
    echo $a['title'],(!empty($a['resourceId']['videoId'])?" Added: {$a['resourceId']['videoId']}":''),"\n";
}

这是Demo,我已修改第二个视频的videoId(使其为空)以实现效果。

输出:

test title 1 Added: Da8-QfGemgo
test title 2
test title 3 Added: 5lvkwZZZmGc