如何避免显示随机图像脚本的重复?

时间:2013-04-20 00:31:49

标签: php

以下脚本非常适合我的需求,但不幸的是,它经常显示重复的图像。

如何修改以解决此问题?

或者代替这个是否有类似的脚本允许在一列中显示随机图像,并且每个列都有自己的链接?

感谢。

<?php

function display_random_img($array) {
$key = rand(0 , count($array) -1);
$link_url = $array[$key]['url'];
$alt_tag = $array[$key]['alt'];
$random_img_url = $array[$key]['img_url'];
list($img_width, $img_height) = getimagesize($random_img_url);
return "<a href=\"$link_url\"><img src=\"$random_img_url\" width=\"$img_width\" height=\"$img_height\" alt=\"$alt_tag\" /></a>";
}
//-----------------------
$ads_array = array(
array(
    'url' => 'http://www.mysite.com/',
    'alt' => 'Image1',
    'img_url' => 'http://www.mysite.com/pic1.jpg'
),
array(
    'url' => 'http://www.yoursite.com/',
    'alt' => 'Image2',
    'img_url' => 'http://www.mysite.com/pic2.jpg'
),
array(
    'url' => 'http://www.theirsite.com/',
    'alt' => 'Image3',
    'img_url' => 'http://www.mysite.com/pic3.jpg'
)
);
//-----------------------
$ads_array_1 = array( 
array(
    'url' => 'http://www.mysite.com/',
    'alt' => 'Image1',
    'img_url' => 'http://www.mysite.com/pic1.jpg'
),
array(
    'url' => 'http://www.yoursite.com/',
    'alt' => 'Image2',
    'img_url' => 'http://www.mysite.com/pic2.jpg'
),
array(
    'url' => 'http://www.theirsite.com/',
    'alt' => 'Image3',
    'img_url' => 'http://www.mysite.com/pic3.jpg'
)
);

//-----------------------
$ads_array_2 = array( 
array(
    'url' => 'http://www.mysite.com/',
    'alt' => 'Image1',
    'img_url' => 'http://www.mysite.com/pic1.jpg'
),
array(
    'url' => 'http://www.yoursite.com/',
    'alt' => 'Image2',
    'img_url' => 'http://www.mysite.com/pic2.jpg'
),
array(
    'url' => 'http://www.theirsite.com/',
    'alt' => 'Image3',
    'img_url' => 'http://www.mysite.com/pic3.jpg'
)
);

//-----------------------
echo display_random_img($ads_array);
echo display_random_img($ads_array_1); 
echo display_random_img($ads_array_2);
?>

2 个答案:

答案 0 :(得分:1)

如果您的图像集中只有3张图像,则图像显示两次的可能性为1/3。所以增加你的图像列表。

但是,您应该使用mt_rand()什么能为您提供更好的随机性。但主要问题是图像数量少


更新:

在考虑了一下你的问题之后,我认为你需要这样的事情:

你只需要一个阵列:

$ads_array = array(
array(
    'url' => 'http://www.mysite.com/',
    'alt' => 'Image1',
    'img_url' => 'http://www.mysite.com/pic1.jpg'
),
array(
    'url' => 'http://www.yoursite.com/',
    'alt' => 'Image2',
    'img_url' => 'http://www.mysite.com/pic2.jpg'
),
array(
    'url' => 'http://www.theirsite.com/',
    'alt' => 'Image3',
    'img_url' => 'http://www.mysite.com/pic3.jpg'
)
);

此函数使用shuffle()生成随机性:

function display_random_images($array, $maxcount = 3) {
    // shuffle $array elements
    shuffle($array);
    $html = '';
    for($i = 0; $i < min(count($array), $maxcount); $i++) {
        $img = $array[$i];
        $link_url = $img['url'];
        $alt_tag = $img['alt'];
        $random_img_url = $img['img_url'];
        list($img_width, $img_height) = getimagesize($random_img_url);
        $html .= "<a href=\"$link_url\"><img src=\"$random_img_url\" width=\"$img_width\" height=\"$img_height\" alt=\"$alt_tag\" /></a>";
    }
    return $html;
}

现在调用该函数,它将输出$maxcount个图像,默认为3

echo display_random_images($ads_array);

如果你有更多的图像,那么你可以这样称呼它:

echo display_random_images($ads_array, 10); // 10 imgs or whatever

答案 1 :(得分:0)

这可能有用,或者至少是'想法:

function display_random_img($array) {
    static $displayedImages = array();
    // ...
    $length = count($array);
    if(count($displayedImages) === $length) {
        // Every image was picked, restarting.
        $displayedImages = array();
    }
    while(true) {
        $rand = rand(0, $length - 1);
        if( ! isset($array[$rand])) {
            // Image at $rand not shown yet.
            $displayImages[$rand] = true;
            break;
        }
    }
    $imageDetails = $array[$rand];
    // ...
}

但是对于巨大的图像阵列来说可能会很慢