我从用户帐户中提取YouTube视频,然后将其保存在一个阵列中。
我被要求隐藏数组中的某些视频,所以我想我可以使用array_diff执行此操作,并创建一个包含我要排除的视频ID的数组。
$return = array();
foreach ($xml->entry as $video) {
$vid = array();
$vid['id'] = substr($video->id,42);
$vid['title'] = $video->title;
$vid['date'] = $video->published;
$media = $video->children('http://search.yahoo.com/mrss/');
$yt = $media->children('http://gdata.youtube.com/schemas/2007');
$attrs = $yt->duration->attributes();
$vid['length'] = $attrs['seconds'];
$attrs = $media->group->thumbnail[0]->attributes();
$vid['thumb'] = $attrs['url'];
$yt = $video->children('http://gdata.youtube.com/schemas/2007');
$attrs = $yt->statistics->attributes();
$vid['views'] = $attrs['viewCount'];
array_push($return, $vid);
}
foreach($return as $video) {
$exclude = array('id' => 'zu8xcrGzxQk'); // Add YouTube IDs to remove from feed
$video = array_diff($video, $exclude);
但随后加班我查看了该页面,仍然显示了排除数组中带有ID的视频。
我是否正确地认为,如果数组2中不存在数组2,则array_diff将仅显示数组1中的值?
我是否有任何理由说明我在排除数组中设置的值是否未从主数组中删除?
答案 0 :(得分:0)
您目前正在做的是从具有该YouTube ID的视频中排除id
键/值,而不是从$return
中删除这些视频。
要删除具有给定id
的视频,您需要在$return
上运行操作,您可以使用array_filter
,array_diff_key
或在初始时将其过滤掉循环。
array_filter
$filter = array('zu8xcrGzxQk', /* other ids */);
$return = array_filter($return, function ($a) use ($filter) {
return !in_array($a['id'], $filter);
});
array_diff_key
为了做到这一点,你需要制作$return
YT ID的键:
foreach ($xml->entry as $video) {
// your old loop code
// ...
// then instead of array_push you do
$return[$vid['id']] = $vid;
}
// now you can do your diff against the keys
$filter = array('zu8xcrGzxQk', /* other ids */);
$exclude = array_combine($filter, $filter);
$return = array_diff_key($return, $exclude);
$filter = array('zu8xcrGzxQk', /* other ids */);
foreach ($xml->entry as $video) {
$id = substr($video->id,42);
if (in_array($id, $filter)) {
continue;
}
// the rest of your original loop code
}