2

我需要防止生成的代码产生重复。这是正确的方法还是有更有效的方法?

function generate_code ()
{       
    $s = get_random_code();

    // check if code is already in db
    if (is_in_db($s))
        return generate_code();
    else
        return $s;
}
4

4 回答 4

3

无需检查数据库,

<?php

    uniqid (rand(), true); 

?>
于 2012-09-27T13:33:14.593 回答
1

您可以使用 while 循环,以避免可能的递归深度限制:

function generate_code ()
{       
    $s = get_random_code();

    // check if code is already in db
    while (is_in_db($s))
        $s = get_random_code();

    return $s;
}
于 2012-09-27T13:29:10.603 回答
1

如果在生成代码后,又生成了另一个重复的代码怎么办?

function generate_code () 
{        
    $s = get_random_code(); 

    // check if code is already in db 
    while (is_in_db($s)) { 
      $s = get_random_code(); 
    } 

    return $s; 
} 

无需进行递归。

于 2012-09-27T13:29:15.123 回答
0

是的,有。如果需要,连接您的主键,添加一些唯一的列。并对其进行哈希处理。我不完全确定,但从 2 个不同的值获得相同哈希的风险非常低。有人说,你更有可能赢得乐透,同时被小行星摧毁并被闪电击中。

于 2012-09-27T13:31:59.337 回答