从具有唯一数字的模式中获取随机数

时间:2011-08-05 17:32:48

标签: php random unique

如果模式是123456,请说。

在php中,有可能得到数字的确切长度为6位,数字在生成的数字中不应重复多次。

456136 -- all digit are unique right

56136 -- wrong digit 4 is missing
456436 -- wrong digit 4 repeats

4 个答案:

答案 0 :(得分:5)

如果您需要1-6位

str_shuffle('123456');

如果您需要1-9位

substr(str_shuffle('123456789'),0,6);

Manual

答案 1 :(得分:1)

这应该给你0次重复:

$random = array();
while(count($random) != 6)
{
    $random[] = rand(0, 9);
    $random = array_unique($random);
}
$random = implode('', $random);

答案 2 :(得分:1)

您可以先使用str_split()

将模式拆分为数字数组
$pattern = '123456';
$digits = str_split($pattern);


然后,您可以在该数组上使用shuffle(),因此其元素按随机顺序排列:

shuffle($digits);


最后,你可以implode()随机化数组回到字符串:

$result = implode('', $digits);


转储该变量的内容:

var_dump($result);


你会得到这样的结果:

string(6) "645132"
string(6) "462513"
string(6) "542316"

始终为六位数字,始终为您指定的数字;并且没有比模式中指定的次数多。

答案 3 :(得分:0)

你可以试试这个:

$nums = array();

while(count($nums)<=6){
    $rand = rand(0,9);
    if(!in_array($rand, $nums)){
         $nums[] = $rand;
    }
}

echo implode('',$nums);

演示:

第一次运行:    http://codepad.org/31AKqeYz
第二次运行: http://codepad.org/ckuUQCP3