在array_rand中获取重复的结果

时间:2014-12-22 10:16:34

标签: php

<?php

class GenCrypt
{
    public function generate()
    {
        $hashSource = array_merge(range('A', 'Z'), range('a', 'z'), range(0, 9));
        $hashRandom = array_rand($hashSource, 12);
        shuffle($hashRandom);
        return implode(',', $hashRandom);
    }
}

$gen = new GenCrypt;
$count = array();

for ($i = 0; $i < 1000; $i++) {
    $count[] = $gen->generate();
}

var_dump(count($count));
var_dump(count(array_unique($count)));

我想生成非重复的序列号,因此我使用array_randshuffle来避免重复数据,但仍然会获得定期重复的结果,如何使其工作?

1 个答案:

答案 0 :(得分:1)

array_rand不提供独特的元素,它只会获取一个或多个randoms。您需要使用array_unique来检索唯一身份用户。此外,没有必要改组randoms。

总结:

// $hashRandom = array_rand($hashSource, 12); // no promise on uniqueness

while(count($hashRandom = array_unique(array_rand($hashSource, count($hashSource)))) < 12) {
  /* insuccessful try, repeat */
}

// here $hashRandom has 12 uniques

一般情况下,第一次尝试应该从12中随机抽取count($hashSource)个唯一元素。如果没有,将重新评估该陈述,直到12屈服。希望它有所帮助。