我测试php array_rand函数并发现它有重复结果,这是我的代码:
$arr = range(1,10000);
$max = 200;
$time = 0;
while($time < $max){
echo array_rand($arr).'<br>';
$time++;
}
这就是结果:
你可以看到它保持输出重复数组索引,我很困惑为什么它这样工作,它应该选择一个随机索引。
答案 0 :(得分:1)
你可以确保他们不要做这样的事情重复:
$arr = range(1,10000);
$max = 30;
$time = 0;
$used = array();
while($time < $max){
$num = array_rand($arr);
if( ! in_array($num, $used) ){
echo $num . '<br>';
$used[] = $num;
$time++;
}
}
答案 1 :(得分:0)
你不需要同时使用! array_rand
接受最大随机密钥数作为第二个参数。
$arr = range(1,10000);
$max = 200;
$ran = array_rand($arr,$max);
var_dump($ran); // random keys
//tested with origin array $arr
//foreach($ran as $key) {
// echo $arr[$key]."<br>";
//}
答案 2 :(得分:0)
因为随机值不是唯一的。除非你真的必须使用1到10,000之间的数字,否则为什么不考虑以下函数来获得唯一的ID?
$number_and_letters = uniqid();
OR
$numbers_only = hexdec(uniqid());
希望它有所帮助!