PHP随机图像集

时间:2011-11-26 19:56:24

标签: php random rotation

我正在使用php脚本随机显示图片。我已经三次重复这个脚本因为我想一次显示三个随机图像 - 我不确定如何更改php代码以显示3个图像。

问题是,我不想让所有三个脚本同时显示相同图像的机会。是否有一些东西可以添加到此代码中以确保显示的每个图像总是不同?

<?php 
$random = "random.txt"; 
$fp = file($random); 
srand((double)microtime()*1000000); 
$rl = $fp[array_rand($fp)]; 
echo $rl; 
?>

html:

 <?php include("rotate.php"); ?>
 <?php include("rotate.php"); ?>
 <?php include("rotate.php"); ?>

* random.txt只有一个带链接的文件名列表。

4 个答案:

答案 0 :(得分:5)

简单的解决方案......

  1. 获取随机图像数组(您已经这样做了)
  2. 随机播放阵列
  3. 只要您需要一个
  4. ,就会从数组末尾弹出一个图像

    rotate.php

    $random = "random.txt"; 
    $fp = file($random); 
    shuffle($fb); //randomize the images
    

    代码

    <?php include('rotate.php') ?>
    

    每当您需要图像时

    <?php echo array_pop( $fb ) ?>
    

    http://php.net/manual/en/function.array-pop.php

答案 1 :(得分:2)

function GetRandomItems($arr, $count)
{
    $result = array();
    $rcount = 0;
    $arrsize = sizeof($arr);
    for ($i = 0; ($i < $count) && ($i < $arrsize); $i++) {
        $idx = mt_rand($rcount, $arrsize);
        $result[$rcount] = trim($arr[$idx]);
        $arr[$idx] = $arr[$rcount];
        $rcount++;
    }
    return $result;
}

$listname = "random.txt";
$list = file($listname);
$random = GetRandomItems($list, 3);
echo implode("<BR>", $list);

P.S。实际上,盖伦的答案更好。出于某种原因,我忘记了洗牌xD

答案 2 :(得分:1)

您可以编写递归函数来检查数组ID是否已经打印,如果已经打印,则再次调用自身。只需将其放入for循环中即可打印三次:)

但请记住,真正的random图像可能会重叠!

$beenDisplayed = array();

function dispRand($id) {
    if (in_array($id, $beenDisplayed)) {
        //generate random number
        dispRand($id);
    }
    else {
        array_push($beenDisplayed, $id);
    }
}

for ($i = 0; $i < 3; $i++) {
    dispRand($random_id);
}

答案 3 :(得分:1)

您可以使用array_rand()一次选择多个随机密钥,如下所示:

$random = "random.txt";
$fp = file($random);
shuffle($fp);
// You don't need this. The array_rand() function
// is automatically seeded as of 4.2.0
// srand((double)microtime()*1000000);
$keys = array_rand($fp, 3);
for ($i = 0; $i < 3; $i++):
    $rl = $fp[$keys[$i]]; 
    echo $rl;
endfor;

这将消除多次包含文件的需要。一切都可以完成。