PHP array_rand函数得到重复的结果

时间:2017-08-25 02:38:23

标签: php

我测试php array_rand函数并发现它有重复结果,这是我的代码:

    $arr = range(1,10000);
    $max = 200;
    $time = 0;
    while($time < $max){
        echo array_rand($arr).'<br>';
        $time++;
    }

这就是结果:

enter image description here

你可以看到它保持输出重复数组索引,我很困惑为什么它这样工作,它应该选择一个随机索引。

3 个答案:

答案 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());

希望它有所帮助!