Prosta implementacja algorytmu LCS.
<?php
function lcs($s1,$s2)
{
for ($i1=0;$i1<=$len1;$i1++) $lcstab[$i1]=array();
for ($i2=0;$i2<=$len2;$i2++) $lcstab[0][$i2]=$i2;
for ($i1=0;$i1<=$len1;$i1++)
{
$lcstab[$i1][0]=$i1;
for ($i2=0;$i2<=$len2;$i2++) if ($s1[$i1-1]==$s2[$i2-1]) $lcstab[$i1][$i2]=$lcstab[$i1-1][$i2-1]; else
$lcstab[$i1][$i2]=1
+min($lcstab[$i1-1
][$i2],$lcstab[$i1][$i2-1
]);
}
$i1=$len1;
$i2=$len2;
while ($i1||$i2)
{
if ($s1[$i1-1]==$s2[$i2-1])
{
$i1--;$i2--;
} else
{
if ($i1&&$lcstab[$i1-1][$i2]+1==$lcstab[$i1][$i2])
{
$result[\"changes1\"][$i1-1]=\"usuniety\";
$i1--;
} else
{
$result[\"changes2\"][$i2-1]=\"dodane\";
$i2--;
}
}
}
return $result;
}
$s1='12 n 345 u+';
$s2='12 4 n 34 u+';
$result=lcs($s1,$s2);
for ($i=0;$i<$len1;$i++)
{
if ($result[\"changes1\"][$i]) echo \"<span style='background: red'>{$s1[$i]}</span>\"; else echo \"{$s1[$i]}\";
}
for ($i=0;$i<$len2;$i++)
{
if ($result[\"changes2\"][$i]) echo \"<span style='background: green'>{$s2[$i]}</span>\"; else echo \"{$s2[$i]}\";
}
?>
Zlozonosc dlugosc_pierwszego*dlugosc_drugiego -> wiec dla malych ciagow bedzie dzialac ok, ale dla dlugich nie polecam ;]
To samo robi tez funkcja:
http://www.php.net/manual/en/function.levenshtein.php