(对不起,如果标题很无用)
我有这个功能从WordPress中的随机帖子中获取第一张图片。这很好用,但现在我需要它从所有匹配中选择一个随机图像,而不是第一个。 (我在query_posts循环中运行此函数以选择类别)
// Get first image in post
function catch_that_image() {
global $post, $posts;
$first_img = '';
ob_start();
ob_end_clean();
$output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches);
$first_img = $matches [1] [0];
//no image found display default image instead
if(empty($first_img)){
$first_img = "/images/default.jpg";
}
// Or, show first image.
return $first_img;
}
所以,任何想法,链接,提示&amp;关于如何从匹配结果中选择随机结果的技巧?
答案 0 :(得分:0)
匹配所有内容,然后使用array_rand()获得随机匹配。
假设您使用PREG_SET_ORDER标志和preg_match_all然后获得随机链接。
$randomImage = $matches[array_rand($matches)][0];
请务必注意array_rand()
会返回一个随机密钥,而不是随机值。
答案 1 :(得分:0)
试试这个
// Get first image in post
function catch_that_image() {
global $post, $posts;
$first_img = '';
ob_start();
ob_end_clean();
$output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches);
//no image found display default image instead
if(!$output){
$first_img = "/images/default.jpg";
} //or get a random image
else $first_img=$matches[1][array_rand($matches[1])];
return $first_img;
}
答案 2 :(得分:0)
您应该可以使用array_rand()
从$matches
数组中返回随机密钥。您可能需要更改从preg_match_all()
获得的数组格式。
您可以使用PREG_PATTERN_ORDER
然后将$matches[$x]
传递给array_rand()
- 其中$x
是您想要的匹配组(0表示完全匹配,1表示第一个子组) 。在这种情况下,array_rand()
会返回一个密钥,您可以使用$matches[$x][$rand_key]
访问随机数据。
或者,使用PREG_SET_ORDER
,您可以将$matches
传递给array_rand()
,然后使用返回的密钥访问匹配的任何子组。 $matches[$rand_key][$x]
请注意,您没有获得随机值,而是将数组键变为随机值。正如其他人所指出的,您可以在访问阵列时直接使用array_rand()
函数,这是一种简单的剪切/粘贴解决方案。但是,我希望这个更长的解释能够揭示代码的作用。