字符串未初始化字符串偏移量-PHP
当我运行下一个代码时:字符串未初始化字符串偏移量-PHP,php,Php,当我运行下一个代码时: function RandomLink() { $characters = "0123456789abcdefghijklmnopqrstuvwxyz"; $string = ""; for($x = 0; $x< 30; $x++) { $string .= $characters[(mt_rand(0, strlen($cha
function RandomLink()
{
$characters = "0123456789abcdefghijklmnopqrstuvwxyz";
$string = "";
for($x = 0; $x< 30; $x++)
{
$string .= $characters[(mt_rand(0, strlen($characters)))]; // Random char
}
return "$string.php";
}
函数随机链接()
{
$characters=“0123456789abcdefghijklmnopqrstuvxyz”;
$string=“”;
对于($x=0;$x<30;$x++)
{
$string.=$characters[(mt_rand(0,strlen($characters)))];//随机字符
}
返回“$string.php”;
}
我得到一个错误,上面写着:未初始化的字符串偏移量。它是什么意思?我如何修复它?
我只是不想像机器人一样编程,我想了解错误背后的原因,有人能解释一下吗?
多谢各位 如注释中所述,您提供给
mt_rand()
的偏移量超过了$characters
长度。更新strlen($characters)-1
此外,您还重新创建了-:
考虑重构以:
function RandomLink() {
$characters = "0123456789abcdefghijklmnopqrstuvwxyz";
$hash = str_shuffle($characters);
return substr($hash, 0, 30) . '.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
,并且距离太远。尝试用strlen($characters)-1替换strlen($characters)
,谢谢!是因为绳子太长了?是的。由于索引从0开始,字符串中的最后一个索引实际上比长度小1,因为字符串的索引从0到35,而mt_rand从0到36。