为什么我在这段php代码中收到一个未初始化的字符串偏移量?

为什么我在这段php代码中收到一个未初始化的字符串偏移量?,php,string,offset,initialization,Php,String,Offset,Initialization,我为我的作业写了一个函数,它将接收一个字符串、一个起始数字和一个长度。函数将获取字符串并输出通过获取所有字母创建的字符串,包括string{n} 例如: string = kingsbridge, n = 4, l = 4. string created = gsbr. 函数的前两个验证部分工作正常,但当实际创建要输出的子字符串时,会出现以下情况: Notice: Uninitialized string offset: 11 in G:\xampp\htdocs\say\ws21C.ph

我为我的作业写了一个函数,它将接收一个字符串、一个起始数字和一个长度。函数将获取字符串并输出通过获取所有字母创建的字符串,包括
string{n}

例如:

string = kingsbridge, n = 4, l = 4.
string created = gsbr.  
函数的前两个验证部分工作正常,但当实际创建要输出的子字符串时,会出现以下情况:

Notice: Uninitialized string offset: 11 in G:\xampp\htdocs\say\ws21C.php on line 58
Notice: Uninitialized string offset: 12 in G:\xampp\htdocs\say\ws21C.php on line 58
Notice: Uninitialized string offset: 13 in G:\xampp\htdocs\say\ws21C.php on line 58    
Notice: Uninitialized string offset: 14 in G:\xampp\htdocs\say\ws21C.php on line 58
…以此类推(无限循环)

这是我的密码:

function substring($s, $n, $l){
    $substring = "";

    if($n > length($s)){     //If asking for substring that starts with an index of the string that's greater than the actual length
        echo "Out of range";
    }
    else{
        if($l > (length($s) - ($n - 1))) { //If start is in index of string but length would mean substring would trail off string
            $newLength = ((length($s)) - ($n - 1));
            substring($s, $n, $newLength);
        }
        else{ //PROBLEM CODE
            for($letter = ($n - 1); $l; $letter++){
                $substring .= $s{$letter};  //Line 58
            }
            echo "$substring";
        }
    }
}
任何关于为什么会发生这种情况(或者为什么会创建一个无限循环)的帮助都将不胜感激

谢谢:)


编辑:我知道在我给出的示例中,字符串{4}将是s,但用户输入数字,因此我将减1以获得他们需要的字母

您的
for
循环是一团混乱,纯粹而简单。仔细看看(首先清除无限循环问题):

所以,您将$letter设置为$n-1,我假设您希望循环所有字母。然后,循环条件是“if$l”。在for循环中,你根本没有改变$l的值,那么你怎么能期望程序突破它呢

如果你试图循环所有的字母,你最好做
$letter=$n-1$字母>=0$字母--


最后,我需要
$s
的内容来调试另一个问题。编辑你的问题

哦,老兄。。。我在干什么哈哈,这太明显了,我的错!哈哈,我不习惯用php编程,所有的美元和其他东西让我觉得有点乱。我把它改为“$letter<$l”,一切都很好:)谢谢你的帮助!
        for($letter = ($n - 1); $l; $letter++){
            $substring .= $s{$letter};  //Line 58
        }