为什么PHP中的函数levenshtein有255个字符的限制?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (162)

有谁知道为什么PHP中的函数levenshtein有255个字符的限制?

提问于
用户回答回答于

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;
}
用户回答回答于

这是该函数的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需要字符串比较,则可以使用上面的实现。

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动