我想构建一个以随机顺序输出的3个商品的数组。我有以下代码,虽然它输出3个随机商品,但它似乎不是随机的。生成的数组中的第一个值似乎总是来自我的商品表中的前2个记录。 offer表中只有5条记录(我不知道这是否影响了事情)。
$arrayOfferCount = $offerCount-1;
$displayThisManyOffers = 3;
$range = range(0, $arrayOfferCount);
$vals = array_rand($range, $displayThisManyOffers);`
任何帮助或建议都将不胜感激。
答案 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)
答案 2 :(得分:0)
可能会随机选择要显示的内容,但会按照它们在数组中显示的顺序显示它们。如果你做了足够的时间(~20)你应该得到第三个出现一次,如果是这样的话(选择5个中最后3个的机会将是1 * 5 * 4,所以大约每20个一个你会看到第三个选项出现。)
答案 3 :(得分:0)
array_rand有时似乎无法正常工作(请参阅PHP手册注释)。
解决方法:获取数组大小并使用函数mt_rand
选择随机索引