0

当我运行下一个代码时:

function RandomLink()
        {
        $characters = "0123456789abcdefghijklmnopqrstuvwxyz";
        $string = "";
        for($x = 0; $x< 30; $x++)           
            {
              $string .= $characters[(mt_rand(0, strlen($characters)))]; // Random char
            }

        return "$string.php";
        }

我收到一条错误消息:未初始化的字符串偏移量。这是什么意思,我该如何解决?我只是不想像机器人一样编程,我想了解错误背后的原因,有人可以解释一下吗?非常感谢 !

4

2 回答 2

2

你的问题是mt_rand参数maxinclusivestrlen($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 TOO FAR。

于 2013-08-02T15:27:19.830 回答
0

如评论中所述,您提供的偏移量mt_rand()超出了$characters长度。更新strlen($characters) - 1.

此外,您还重新创建了 - str_shuffle()

考虑重构为:

function RandomLink() {
  $characters = "0123456789abcdefghijklmnopqrstuvwxyz";
  $hash = str_shuffle($characters);
  return substr($hash, 0, 30) . '.php';
}
于 2013-08-02T15:24:25.123 回答