Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 生成唯一随机值数组的函数_Php - Fatal编程技术网

Php 生成唯一随机值数组的函数

Php 生成唯一随机值数组的函数,php,Php,由于Mysqlrand()非常耗时,我正在使用Mysqlmax()和PHP的替代方法。我编写了以下代码,用于获取随机产品标识: function RandomUniqueArray($min,$max,$limit){ $random_array = array(); if(isset($limit) && is_numeric($limit)){ for($i=0;$i<$limit;){ $rand_val =

由于Mysql
rand()
非常耗时,我正在使用Mysql
max()
和PHP的替代方法。我编写了以下代码,用于获取随机产品标识:

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;
}
with只需0.101微秒,但其结果集是重复的。唯一值数组很好,但整个集合重复。为什么会这样

我一个接一个地把这两个都称为

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


谢谢。

我做了一个脚本,只需要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;
}
函数随机值($min、$max、$limit)
{
$array=array();
$MAX=mt_rand($min$MAX);
对于($i=0;$i<$limit;$i++)
{
$array[$i]=mt_rand($min,$MAX);
while(is_array($array[$i],$array))//检查是否存在,if.Make new。
{
$array[$i]=mt_rand($min,$MAX);
}
}   
返回$array;
}

您可以使用随机键来确保唯一性,并将键用作值,这是一个简单的示例(如果您有10000个产品,序列ID为50随机):
对于($i=1;$iI)您的意思是说while(在数组中($array[$i],$array)),对吗?@Max AllanExactly!这就是我的意思。
$random_array = array_rand(array_fill(1,64000, true),4);
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;
}