生成一个唯一的数字,并确保它不存在

时间:2015-04-06 18:40:03

标签: php loops

我正在生成这样一个唯一的数字:

$unique_number = rand(100000000, 999999999);

我可以检查它是否存在:

$exists = $this->count_rows('table', "WHERE unique_number=" . $unique_number . "');

然后:

if ($exists >0){ echo 'It exists. Generate it again'; }

问题是......我怎么循环它,直到我得到一个不存在的数字?如果罕见的事件我生成的那个已经存在。

5 个答案:

答案 0 :(得分:0)

尝试

 while($exists >0){
          $exists = $this->count_rows('table', "WHERE unique_number=" . $unique_number . "');
    }

答案 1 :(得分:0)

也许你可以试试这个

$exists = 1;   
while($exists > 0) {

 $unique_number = rand(100000000, 999999999);
 $exists = $this->count_rows('table', "WHERE unique_number=" . $unique_number . "');

}

未经测试

答案 2 :(得分:0)

这将有效:

  function check_number(){

    $unique_number = rand(100000000, 999999999);
    $exists = $this->count_rows('table', "WHERE unique_number=" . $unique_number);



    if ($exists >0){
        $results = check_number();
    }
     else{
            $results = $unique_number;
        return $results;
     }


}

答案 3 :(得分:0)

您需要编写一个类或函数来检查数据是否存在于DB中:如果是,则生成另一个,直到其为no然后添加到DB,请参阅smilar问题:

Generate random and if not exist in DB,add it

答案 4 :(得分:0)

这是另一种方式,它只是一个想法,希望它可以帮助你。

如果您循环检查表格中是否存在该号码,则会花费您

  1. 如果您的数据大约为10000,则可能会运行得如此之快
  2. 如果您的数据大约为100000,则会花费您
  3. 如果可以将计数增加到14

    这肯定会帮到你

    尝试从时间生成随机数

     $unique_number = microtime(true) * 10000;
    

    这将是独一无二的

    您无需循环检查随机数是否在数据库中是唯一的。

    这只是一个想法。认为它可以帮助您实现目标。