1

次のスクリプトは私のニーズに最適ですが、残念ながら重複した画像が頻繁に表示されます。

この問題を修正するにはどうすればよいですか?

または、これの代わりに、ランダムな画像を1つの列に表示し、それぞれに独自のリンクを表示できる同様のスクリプトがありますか?

ありがとう。

<?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);
?>
4

2 に答える 2

1

画像セットに画像が 3 つしかない場合、画像が 2 回表示される確率は 1/3 です。したがって、画像のリストを増やしてください。

ただし、ランダム性が向上mt_rand()するものを使用する必要があります。しかし、主な問題は画像の量が少ないことです


アップデート:

あなたの質問について少し考えた後、次のようなものが必要だと思います。

必要な配列は 1 つだけです。

$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
于 2013-04-20T00:36:45.043 に答える
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];
    // ...
}

ただし、巨大な画像配列では遅くなる可能性があります

于 2013-04-20T00:49:01.153 に答える