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

Extracting Items from json results using php (items showing up more than once)

提问人:Born2DoubleUp 提问时间:7/17/2017 最后编辑:Born2DoubleUp 更新时间:7/17/2017 访问量:51

问:

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

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

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

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

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

PS 我省略了,因为这不是我问题的原因。$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

评论

0赞 Born2DoubleUp 7/17/2017
不知道如何正确地“Tab”我的代码。正如您可能知道的那样,我在这里发帖很陌生,并且仍在试图弄清楚如何显示代码以及我需要提出问题的所有内容。
0赞 Born2DoubleUp 7/17/2017
我更新了我的第一篇文章,提供了更多信息,希望能有所帮助。

答:

0赞 mickmackusa 7/17/2017 #1

与其使用那么多的 foreach 循环,不如使用几个这样的调用:(演示array_column())

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

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

输出:

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";
}

这是一个演示,我修改了第二个视频的 videoId(将其设置为空)以获得效果。

输出:

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

评论

0赞 Born2DoubleUp 7/17/2017
这完全实现了我想要的。谢谢!
0赞 mickmackusa 7/17/2017
@Born2DoubleUp 请阅读以下内容:meta.stackexchange.com/questions/5234/...