提问人:Born2DoubleUp 提问时间:7/17/2017 最后编辑:Born2DoubleUp 更新时间:7/17/2017 访问量:51
使用 php 从 json 结果中提取项目(项目多次出现)
Extracting Items from json results using php (items showing up more than once)
问:
我目前正在尝试从我在 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>";
}
}
}
答:
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 转换为数组,然后访问子数组,然后收集子数组,然后从中收集值。items
snippet
title
输出:
array (
0 => 'test title 1',
1 => 'test title 2',
2 => 'test title 3',
)
如果需要 和 ,则可以改用它:title
videoId
$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/...
上一个:显示通过搜索查询找到的列
评论