2017-07-16 83 views
0

我正在尝试从我在YouTube上创建的播放列表中提取标题和视频ID。使用php从json结果中提取项目(项目显示不止一次)

我使用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>"; 
     } 
    } 
} 
+0

不知道如何 “标签” 我的代码正确。因为你可能可以解决这个问题,所以我很想在这里发布,并且仍然试图找出如何显示代码以及我需要提问的所有内容。 – Born2DoubleUp

+0

我更新了我的第一篇文章,希望能提供更多的帮助。 – Born2DoubleUp

回答

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,我已经修改了第二视频的视频ID (使其变空)以起作用。

输出:

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

这完成了我想要的。谢谢! – Born2DoubleUp

+0

@ Born2DoubleUp请阅读:https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – mickmackusa