有人知道为什么PHP中的功能 levenshtein 具有255个字符的限制吗?
答案 0 :(得分:2)
这是该功能的PHP完整实现。如您所见,存在基于字符串字符长度的嵌套循环:
function lev($s,$t) { $m = strlen($s); $n = strlen($t); for($i=0;$i<=$m;$i++) $d[$i][0] = $i; for($j=0;$j<=$n;$j++) $d[0][$j] = $j; for($i=1;$i<=$m;$i++) { for($j=1;$j<=$n;$j++) { $c = ($s[$i-1] == $t[$j-1])?0:1; $d[$i][$j] = min($d[$i-1][$j]+1,$d[$i][$j-1]+1,$d[$i-1][$j-1]+$c); } } return $d[$m][$n]; }
https://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance#PHP
PHP中名为levenshtein()
的PHP版本从版本4.0.1开始到255个字符长度。
我认为引入限制是为了将性能和持续时间保持在最可接受的范围内。
如果您需要长度大于255的字符串比较,则可以使用上面的实现。
答案 1 :(得分:-3)
PHP的levenshtein()函数最多只能处理255个字符,这对于用户输入来说是不现实的(仅这篇文章的第一段有285个字符)。如果您选择使用能够处理超过255个字符的自定义函数,则效率是一个重要问题。
我使用此功能,专用于此情况,但速度更快:
function ucase_percent ($str) {
$str2 = strtolower ($str);
$l = strlen ($str);
$ucase = 0;
for ($i = 0; $i < $l; $i++) {
if ($str{$i} != $str2{$i}) {
$ucase++;
}
}
return $ucase / $l * 100.0;
}