【问题标题】:Extracting Items from json results using php (items showing up more than once)使用 php 从 json 结果中提取项目(项目显示不止一次)
【发布时间】:2017-12-21 09:27:51
【问题描述】:

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

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

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

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

但是,当我使用以下代码列出项目时,前 2 个项目连续列出 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>";
        } 
    }
}

【问题讨论】:

  • 不知道如何正确地“制表”我的代码。正如您可能会解决的那样,我对在这里发帖还是很陌生,并且仍在尝试弄清楚如何显示代码以及我需要提出问题的所有内容。
  • 我已经更新了我的第一篇文章,提供了希望能有所帮助的更多信息。

标签: php json youtube-data-api


【解决方案1】:

我会使用几个 array_column() 调用,而不是这么多 foreach 循环:(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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-15
  • 2022-11-27
相关资源
最近更新 更多