我为我的课程编写了一个函数,它将接收一个字符串,一个起始编号和一个长度。该函数将获取字符串并输出通过包含和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以获得他们需要的字母
答案 0 :(得分:1)
你的for
循环是一团糟,纯粹而简单。仔细看看它(首先清除无限循环问题):
for($letter = ($n - 1); $l; $letter++){
$substring .= $s{$letter}; //Line 58
}
所以,你将$ letter设置为$ n-1,我认为你想要遍历所有字母。然后,你的循环条件是"如果$ l"。您并未在for循环中更改$ l 的值,那么您怎么能指望程序突破它?
如果您试图循环播放所有字母,那么您最好不要执行$letter = $n-1; $letter >= 0; $letter--
。
最后,我需要$s
的内容才能调试其他问题。编辑你的问题!