【发布时间】:2010-04-15 00:58:35
【问题描述】:
我有一个函数可以根据随机数以不同的顺序输出项目。例如,1/2 的时间 Popeye's 及其将在列表中排名第一,而 Taco Bell 及其徽标将排名第二,而一半的时间将是相反的情况。
问题是当用户重新加载或返回页面时,顺序会重新随机化。这里的 $Range 是 db 中的项目数,所以它使用 1 到 $range 之间的随机数。
$random = mt_rand(1,$range);
for ($i = 0 ; $i < count($variants); $i++) {
$random -= $variants[$i]['weight'];
if ($random <= 0) {
$chosenoffers[$tag] = $variants[$i];
break;
}
}
我去了会话的开头并设置了这个:
if (!isset($_SESSION['rannum'])){
$_SESSION['rannum']=rand(1,100);
}
我的想法是,我可以将函数中的 mt_rand 替换为某种伪随机生成器,该生成器在整个会话期间使用相同的 1-100 随机数作为种子。这样我就不必重写所有已经编写的代码。我是在找错树还是这是个好主意?
【问题讨论】:
-
为什么不直接使用array_shuffle?