函数生成唯一随机值数组

时间:2011-10-22 09:48:24

标签: php

由于Mysql rand()非常耗时,我使用Mysql max()和PHP使用备用方式。我编写了这段代码来获取随机的product_id:

function RandomUniqueArray($min,$max,$limit){

    $random_array = array();
    if(isset($limit) && is_numeric($limit)){
        for($i=0;$i<$limit;){
            $rand_val = mt_rand($min, $max);
            if(!in_array($rand_val, $random_array)){
                $random_array[] = $rand_val;
                $i++;
            }
        }
    }
    return $random_array;
}

这样可以正常工作,因为我希望每次它给出不同的结果集具有不同的唯一值但它需要6.232微秒。 我得到谷歌的是:

$random_array = array_rand(array_fill($min,$max, true),$limit);

仅需0.101微秒,但其结果集重复均值。唯一值数组很好但重复整个集合。为什么会这样?

我一个接一个地打电话给这两个人

$random_array = RandomUniqueArray(1,64000,4);

$random_array = array_rand(array_fill(1,64000, true),4);

谢谢。

1 个答案:

答案 0 :(得分:0)

我制作了一个剧本,只需要̣̣̣+ - 4.5E-6。

试试吧。

function randomValue($min,$max,$limit)
{
    $array = Array();
    $MAX = mt_rand($min,$max);
    for($i = 0;$i < $limit;$i++)
    {
        $array[$i] = mt_rand($min,$MAX);
        while( is_array($array[$i],$array) ) //To check if exist, if. Make new.
        {
           $array[$i] = mt_rand($min,$MAX);
        }
    }   
    return $array;
}