我在以下在线发布的代码中获得了一个单位化的字符串偏移量:
function generateKey() {
$length = 15;
$characters = '0123456789abcdefghijklmnopqrstuvwxyz';
$string = '';
for ($p = 0; $p < $length; $p++) {
$string .= $characters[mt_rand(0, strlen($characters))];
}
return $string;
}
是否因为$ characters []被应用于字符串?我没有完全理解错误的含义,但是我怎么能达到同样的效果并绕过它(它现在工作正常,只是抛出一个错误)?
答案 0 :(得分:2)
将此行更改为:
$string .= $characters[mt_rand(0, strlen($characters)-1)];
请注意-1
。 strlen()
为您提供字符串中的字符数,但它们从偏移量0开始。
abc
字符串的长度为3,但我可以使用的最高索引是[2]
。
答案 1 :(得分:2)
基本上已经回答了什么,但我建议
strlen()
操作一次,并将最大随机数存储到变量$string
缓冲区并写入其中而不是正在进行的连接,$p
,以便从后到前工作。Demo,代码:
function generateKey() {
$length = 15;
$characters = '0123456789abcdefghijklmnopqrstuvwxyz';
$maxrnd = strlen($characters)-1;
$string = str_repeat('0', $length);
for ($p = $length; $p--;) {
$string[$p] = $characters[mt_rand(0, $maxrnd)];
}
return $string;
}
答案 2 :(得分:1)
$characters[mt_rand(0, strlen($characters) - 1)];
如果你的字符串中有10个字符,strlen($ characters)将返回10.但是,你的索引将从0到9,所以你必须从strlen结果中减去1。