当我运行下一个代码时:
function RandomLink()
{
$characters = "0123456789abcdefghijklmnopqrstuvwxyz";
$string = "";
for($x = 0; $x< 30; $x++)
{
$string .= $characters[(mt_rand(0, strlen($characters)))]; // Random char
}
return "$string.php";
}
我收到一条错误消息:未初始化的字符串偏移量。它的意思是什么?我该如何解决? 我只是不想像机器人一样编程,我想要了解错误背后可能有人解释我吗? 非常感谢你!
答案 0 :(得分:2)
您的问题是mt_rand
参数max
包含。所以strlen($characters)
应该是strlen($characters)-1
,因为索引中的字符不等于字符串的长度。
$string .= $characters[(mt_rand(0, strlen($characters)-1))];
如果您的字符串长度为2,如"ab"
,那么mt_rand(0, 2)
将返回值0,1和2,即a
,b
,并且只有一个太多FAR。
答案 1 :(得分:0)
如评论中所述,您提供给mt_rand()
的偏移量超出$characters
长度。更新strlen($characters) - 1
。
此外,您已重新创建 - str_shuffle()
:
考虑重构:
function RandomLink() {
$characters = "0123456789abcdefghijklmnopqrstuvwxyz";
$hash = str_shuffle($characters);
return substr($hash, 0, 30) . '.php';
}