PHP子字符串查找无限循环错误

PHP子字符串查找无限循环错误,php,string,loops,infinite-loop,Php,String,Loops,Infinite Loop,我有一段代码,出于某种原因,它保持在一个无限循环中,假设它只打印所有可能的子字符串。这是完整函数的一部分。函数的目的是从字符串$str1中找到的字符串$str2返回子字符串的索引。非常感谢你的帮助 $str1='QYDIKYTWNVPKIAPKS'; $str2='KYTWNVPKSS'; print($str1);echo"</br>";print($str2);echo"</br>"; function overlapping($str1,$str2) { $

我有一段代码,出于某种原因,它保持在一个无限循环中,假设它只打印所有可能的子字符串。这是完整函数的一部分。函数的目的是从字符串$str1中找到的字符串$str2返回子字符串的索引。非常感谢你的帮助

$str1='QYDIKYTWNVPKIAPKS';
$str2='KYTWNVPKSS';
print($str1);echo"</br>";print($str2);echo"</br>";
function overlapping($str1,$str2) {
    $peptide1 = str_split($str1);
    $peptide2 = str_split($str2);
    $longest_seq=array();
    $len=count($peptide2)-1;
    for ($i = 0; $i < count($peptide1); ++$i) {
        for ($j = 0; $j < count($peptide2); ++$j) {
            if ($peptide2[$j]==$peptide1[$i]){
                $k=$j;
                $start=$j;
                $l=$i;
                $tmp=array();
                while ($peptide2[$k]==$peptide1[$l]){
                    array_push($tmp, $peptide2[$k]);
                    $substring=implode($tmp);
                        print $substring;
                        echo"</br>";
                    $k=$k+1;
                    $l=$l+1;
                }
            }
        }
    }
}
$str1='QYDIKYTWNVPKIAPKS';
$str2='KYTWNVPKSS';
印刷品(str1美元);回声“
”;印刷品(str2美元);回声“
”; 函数重叠($str1,$str2){ $peptine1=str_split($str1); $peptide2=str_分割($str2); $longest_seq=数组(); $len=计数($e2)-1; 对于($i=0;$i<计数($1);+$i){ 对于($j=0;$j”; $k=$k+1; $l=$l+1; } } } } }

也许您对如何提取匹配子字符串的索引有另一种想法,我也可以尝试一下,您从不检查以确保$k和$l是有效的偏移量。请在此处查看:

while (isset($peptide2[$k]) && isset($peptide1[$l]) && $peptide2[$k]==$peptide1[$l]){
而不是

while ($peptide2[$k]==$peptide1[$l]){

我不确定这是否与您的问题有关,但我总是在for循环中发布增量

    for ($i = 0; $i < count($peptide1); $i++) {
        // do stuff
    }
for($i=0;$i
@Dan,对不起,没有,他在那份声明中提到了$tmp$肽2保持不变;增加$tmp数组的长度,而不是$peptide2数组的长度。当我在$str2结尾使用相同的字符时,问题就出现了。如果我使用$str2作为$str1的完美子字符串来测试它,那么它的工作就完美了。但是,当我在开始或结束时修改$str2时,它不起作用