String未初始化的字符串偏移量-PHP

时间:2013-08-02 15:21:52

标签: php

当我运行下一个代码时:

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

        return "$string.php";
        }

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

2 个答案:

答案 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,即ab,并且只有一个太多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';
}