我有这个代码,由于某种原因它保持在一个无限循环,当它假设只打印所有可能的子串。这是完整功能的一部分。该函数的目的是从字符串$ 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;
}
}
}
}
}
也许您对如何提取匹配子字符串的索引有另一种想法,我也可以尝试
答案 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
}