当我运行下一个代码时:
function RandomLink()
{
$characters = "0123456789abcdefghijklmnopqrstuvwxyz";
$string = "";
for($x = 0; $x< 30; $x++)
{
$string .= $characters[(mt_rand(0, strlen($characters)))]; // Random char
}
return "$string.php";
}
我收到一个错误,上面写着:未初始化的字符串偏移量。这意味着什么?我该如何修复它?我只是不想像机器人一样编程,我想了解错误背后的原因,有人能解释我吗?非常感谢!
您的问题是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
和JUST ONE太远。
如注释所示,您提供给mt_rand()
的偏移量超过了$characters
的长度。更新strlen($characters) - 1
。
此外,您已经重新创建了-str_shuffle()
:
考虑重构为:
function RandomLink() {
$characters = "0123456789abcdefghijklmnopqrstuvwxyz";
$hash = str_shuffle($characters);
return substr($hash, 0, 30) . '.php';
}