$list_ar = array();
for($x = 0;$x < 500; $x++){
$val = generateRandomString(20);
if(!in_array($val,$list_ar)){
echo $x.'=='.$val.'<br>';
array_push($list_ar,$val);
} else {
echo $x.'== IN ARRAY<br>';
}
}
function generateRandomString($length){
$characterlist = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789';
$characterlist_array = str_split($characterlist);
$id = '';
for($a = 0;$a<$length;$a++){
shuffle($characterlist_array);
$position = array_rand($characterlist_array, 1);
$id .= $characterlist_array[$position];
}
return $id;
}
当我运行上面的代码时,它会给出最多 360 lines
in array false
,之后它会返回in array true
。我希望它会在数组中返回 false 最多 500 lines
我已经运行了 20 多次代码,并且它给出了完全相同的结果,即 360 lines in array false
.有什么想法吗?
根据 Marc 所说的话,如果将函数更改为:
function generateRandomString($length){
$characterlist = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789';
$characterlist_count = strlen($characterlist)-1;
$id = '';
for($a = 0;$a<$length;$a++){
$id .= $characterlist[rand(0,$characterlist_count)];
}
return $id;
}
它仍然失败吗?
由于我们用替代方案回答:
function generateRandomString($length) {
$characterlist = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789';
$characterlist_array = str_split($characterlist);
shuffle($characterlist_array);
return implode(array_slice($characterlist_array, 0, $length));
}