PHP子字符串发现无限循环错误

时间:2014-09-02 17:45:18

标签: php string loops infinite-loop

我有这个代码,由于某种原因它保持在一个无限循环,当它假设只打印所有可能的子串。这是完整功能的一部分。该函数的目的是从字符串$ 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;
                }
            }
        }
    }
}

也许您对如何提取匹配子字符串的索引有另一种想法,我也可以尝试

2 个答案:

答案 0 :(得分:0)

您永远不会检查以确保$ k和$ l是有效抵消。在这里检查:

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

而不是

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

答案 1 :(得分:0)

我不确定这是否与您的问题有关,但我总是在for循环中后加。

    for ($i = 0; $i < count($peptide1); $i++) {
        // do stuff
    }