1
我創建了這個函數,它適用於小字符串,但是對於更長的字符串,它會超時。我正在尋找一種方法來使該功能更快速地工作,而不是超時,或更好的方式來實現我想要的。需要幫助優化php字符串差異函數
function find_diffs($string1, $string2)
{
$array1 = preg_split("/\b/", $string1);
$array2 = preg_split("/\b/", $string2);
$array3 = array();
for($i=0, $j=0; $i < count($array1) || $j < count($array2); $i++, $j++)
{
while(badchars($array1, $i))
{
$i++;
}
while(badchars($array2, $j))
{
$j++;
}
if($array1[$i] != $array2[$j])
{
//-------------------------Find Subtractions--------------------//
$k = $i;
while($array1[$i] != $array2[$j])
{
$i++;
if($i == count($array1))
{
$end = true;
break;
}
while(badchars($array1, $i))
{
$i++;
}
}
if($end)
{
//-------------------------Find Additions--------------------//
$end = false;
$i = $k;
$k = $j;
while($array1[$i] != $array2[$j])
{
$j++;
if($j == count($array2))
{
$end = true;
break;
}
while(badchars($array2, $j))
{
$j++;
}
}
if($end)
{
//-------------------------Find Changes--------------------//
$end = false;
$j = $k;
$l = $i;
while($array1[$i] != $array2[$j])
{
$k = $j;
while($array1[$i] != $array2[$j])
{
$j++;
if($j == count($array2))
{
$end = true;
break;
}
while(badchars($array2, $j))
{
$j++;
}
}
if($end)
{
$j = $k;
$i++;
while(badchars($array1, $i))
{
$i++;
}
while(badchars($array2, $j))
{
$j++;
}
}
else
{
$array3[] = array($l,$i,'-');
$array3[] = array($k,$j,'+');
}
if($i == count($array1))
{
$end = true;
break;
}
if($j == count($array2))
{
$end = true;
break;
}
$end=false;
}
if($end)
{
break;
}
else
{
$array3[] = array($l,$i,'-');
$array3[] = array($k,$j,'+');
}
//---------------------End Find Changes--------------------//
}
else
{
$array3[] = array($k,$j,'+');
}
}
else
{
$array3[] = array($k,$i,'-');
}
}
}
$array3[] = array(0,count($array1),'=');
return array($array1,$array2,$array3);
}
應該做的功能是什麼? – SorinV 2009-06-05 18:36:57
不好意思,這個函數需要兩次叮咬,找出它們之間的差異,添加了哪些單詞,哪些已被拿走。 – Mijoja 2009-06-05 22:51:31