我正在使用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只有一个带链接的文件名列表。
答案 0 :(得分:5)
简单的解决方案......
rotate.php
$random = "random.txt";
$fp = file($random);
shuffle($fb); //randomize the images
代码
<?php include('rotate.php') ?>
每当您需要图像时
<?php echo array_pop( $fb ) ?>
答案 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;
这将消除多次包含文件的需要。一切都可以完成。