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 に答える