我在PHP中创建一个随机数组,我的代码似乎没有输出真正随机的答案

时间:2011-11-29 20:14:33

标签: php arrays random

我想构建一个以随机顺序输出的3个商品的数组。我有以下代码,虽然它输出3个随机商品,但它似乎不是随机的。生成的数组中的第一个值似乎总是来自我的商品表中的前2个记录。 offer表中只有5条记录(我不知道这是否影响了事情)。

$arrayOfferCount = $offerCount-1;
$displayThisManyOffers = 3;

$range = range(0, $arrayOfferCount);
$vals = array_rand($range, $displayThisManyOffers);`

任何帮助或建议都将不胜感激。

4 个答案:

答案 0 :(得分:2)

在这里工作正常。通过大量的跑步进行基准测试,而不仅仅是直觉...这里有1000次尝试:

<?php

$offerCount = 5;
$arrayOfferCount = $offerCount-1;
$displayThisManyOffers = 3;

$range = range(0, $arrayOfferCount);

for($i = 0; $i < 1000; $i++) {
    $vals = array_rand($range, $displayThisManyOffers);

    foreach($vals as $val) {
        $counts[$val]++;
    }
}

sort($counts);
print_r($counts);

生成:

Array
(
    [0] => 583
    [1] => 591
    [2] => 591
    [3] => 610
    [4] => 625
)

答案 1 :(得分:1)

我知道mt_rand()是更好的PRNG。

但是,在您的情况下,您需要让数据库为您选择

SELECT * FROM ads ORDER BY RAND() LIMIT 0, 3

答案 2 :(得分:0)

可能会随机选择要显示的内容,但会按照它们在数组中显示的顺序显示它们。如果你做了足够的时间(~20)你应该得到第三个出现一次,如果是这样的话(选择5个中最后3个的机会将是1 * 5 * 4,所以大约每20个一个你会看到第三个选项出现。)

答案 3 :(得分:0)

array_rand有时似乎无法正常工作(请参阅PHP手册注释)。

解决方法:获取数组大小并使用函数mt_rand

选择随机索引