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


String Uninitialized string offset -PHP

当我运行下一个代码时:

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,即ab和JUST ONE太远。

如注释所示,您提供给mt_rand()的偏移量超过了$characters的长度。更新strlen($characters) - 1

此外,您已经重新创建了-str_shuffle():

考虑重构为:

function RandomLink() {
  $characters = "0123456789abcdefghijklmnopqrstuvwxyz";
  $hash = str_shuffle($characters);
  return substr($hash, 0, 30) . '.php';
}