我有两个函数,makeKey()和keyExists().
makeKey()只生成一个5位随机字母数字键,keyExists()接受此键作为其唯一参数,并在表中查找,根据它是否存在返回true/false.
我需要做一些非常简单的事情,但我无法找出最快捷的方法.
我只需要创建一个密钥,如果它存在于表中,则再次创建一个密钥,依此类推,直到返回一个唯一的密钥.我认为一个while循环就足够了?
谢谢,请原谅相当基本的问题,我想我昨天在阳光下煮了我的大脑.
我会使用一个do- while循环:
do {
$newKey = makeKey();
} while (keyExists($newKey));
Run Code Online (Sandbox Code Playgroud)
这将在每次迭代时生成一个新密钥,直到该密钥尚不存在.
任何依赖于创建,然后检查的解决方案将在关键空间填满时具有可怕的性能.使用自动生成的列(标识或guid)生成唯一密钥会更好.如果需要使用字母数字,请使用映射函数将其转换为您选择的字母表,方法是选择位组并将其用作字母表的索引.
伪代码
alphabet = "ABCDE...789";
key = insert new row, get autogenerated key
alphaKey = "";
while (get n bits from key)
alphaKey += alphabet[bits]
done
echo alphaKey
Run Code Online (Sandbox Code Playgroud)