我指的是在PHP random string generator(我已经删除了默认的$长度参数)的答案函数。PHP随机字符串其实不是随机的
因此,此代码使用该函数,但由于某种原因,如果您运行此代码,您将看到该字符串在数组中出现多次!那么,如果这是真正的随机性,我可以产生这些结果吗?我需要修改一些东西来产生真正随机的字符串吗?
function generateRandomString($length) {
$characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
return $randomString;
}
$i = 0;
while ($i < 5000){
$r = '';
$r = generateRandomString(8);
$arr[$r][$i] = $r;
$i++;
}
foreach ($arr as $key=>$rand){
if(count($rand) > 1){
echo "$key has ".count($rand).' results<br>';
}
}
实施例的结果:
ASCn2Db1 has 2 results
4ceXoUgh has 2 results
fCdzjEAV has 2 results
QRkXxAUJ has 2 results
创建随机字符串并不意味着字符串保证是唯一的!为什么会这样呢?随机算法没有历史记录。而实际上恰恰相反:对于简短的字符串和许多尝试,你必须期待重复。只有很多可能的组合... – arkascha
您正在将这些随机字符串保存在数据库中。如果是的话,你可以很容易地摆脱使用while循环的重复字符串 –
真的 - 我刚才以为我们不太可能看到很多重复项 – Antony