Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
字符串未初始化字符串偏移量-PHP_Php - Fatal编程技术网

字符串未初始化字符串偏移量-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。