我有一个小功能,可以抓取评论作者在指定视频上的头像。它只是循环遍历YouTube API v3 commentThreads方法返回的JSON数据。
唯一的问题是,有时作者不止一次评论,所以我的功能不止一次地显示作者头像。我只想展示一次,然后展示给下一个化身。
目前我的功能如下:
function videoCommentAvatars($video) {
// Parse YouTube video ID from the url
if (preg_match('%(?:youtube(?:-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i', $video, $match)) {
$video_id = $match[1];
}
// Gather Video stats with YouTube API v3
$api_key = "API_KEY_HERE";
$JSON = file_get_contents('https://www.googleapis.com/youtube/v3/commentThreads?part=snippet&videoId='.$video_id.'&key='.$api_key);
$json_data = json_decode($JSON, true);
if (!empty($json_data)) {
foreach ($json_data['items'] as $data) {
// Create variables that hold info
$author_name = $data['snippet']['topLevelComment']['snippet']['authorDisplayName']; // Author Name
$author_avatar = $data['snippet']['topLevelComment']['snippet']['authorProfileImageUrl']; // Author Avatar
$author_channel = $data['snippet']['topLevelComment']['snippet']['authorChannelUrl']; // Author Channel URL
echo '<span class="comment-author-avatar">';
echo '<a target="_blank" href="'.$author_channel.'" title="'.$author_name.'"><img width="50" alt="'.$author_name.'" class="comment-author-thumb-single" src="'.$author_avatar.'"></a>';
echo '</span>';
}
}
}
一切正常,但无法检查是否已显示头像。我想过使用数组可能吗?将每个头像URL添加到阵列,并检查阵列以查看密钥是否存在。但对于看似更简单的事情来说,这似乎有些过分。有没有人有一种聪明的方法来检查foreach循环中的重复项?
答案 0 :(得分:2)
要检查数组中的重复项,您有几个选项。首先,为了摆脱任何前循环,你可以使用array_unqiue($array)
,它将返回一个不重复它的值的数组。
或者,如果您确实需要初始访问循环中的所有值,并且如果存在重复则执行某些操作,您可以使用另一个数组作为记录,以查看它们是否出现多次。
$record = array();
foreach ($json_data['items'] as $data) {
// Create variables that hold info
$author_name = $data['snippet']['topLevelComment']['snippet']['authorDisplayName']; // Author Name
if(!in_array($author_name, $record)){
$author_avatar = $data['snippet']['topLevelComment']['snippet']['authorProfileImageUrl']; // Author Avatar
$author_channel = $data['snippet']['topLevelComment']['snippet']['authorChannelUrl']; // Author Channel URL
echo '<span class="comment-author-avatar">';
echo '<a target="_blank" href="'.$author_channel.'" title="'.$author_name.'"><img width="50" alt="'.$author_name.'" class="comment-author-thumb-single" src="'.$author_avatar.'"></a>';
echo '</span>';
$record[] = $author_name;
}
}
答案 1 :(得分:0)
您可以在循环中尝试使用唯一索引的多数组。
$author[$data['snippet'][...]['authorDisplayName']['avatar'] = $data['snippet'][...]['authorProfileImageUrl'];
所以数组中只有唯一的结果。