2015-04-06 75 views
0

我生成这样一个唯一的编号:生成一个唯一的号码,并确保它不存在

$unique_number = rand(100000000, 999999999);

而且我也可以检查它是否存在不喜欢这样:

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

然后:

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

问题是...我如何循环它直到我得到一个不存在的数字?在我生成的这种罕见事件已经存在的情况下。

+2

为什么不从你的db中使用AUTO_INCREMENT?!? – Rizier123

+0

我不希望它是连续的:) – user1227914

+0

*你在沙漠口渴;有人想给你水,你说:我只想要可乐*?!为什么?这有没有任何理由,它不能顺序? – Rizier123

回答

0

尝试

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

在这种情况下,['do-while'](https://php.net/manual/en/control-structures.do.while.php)可能会更好。另外,需要在循环中生成一个新号码。 – TiiJ7

0

也许你可以试试这个

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

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

} 

未测试

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; 
    } 


} 
0

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

如果您遍历检查数量在表现有它会花费你

  1. 如果您有大约10000数据可能跑那么快
  2. 如果您有大约100000次数据它将花费你

如果你可以增加数的数量以14

这必将有助于您

尝试从时间

$unique_number = microtime(true) * 10000; 

产生随机数,这将是唯一的

你不必遍历检查随机数在数据库中是唯一。

这只是和想法。认为它可以帮助你实现你的目标。