levenshtein()

1. 定义

该函数计算两个字符串之间的编辑距离(Levenshtein)。

注:

  • 编辑距离:指两个字符串之间,通过替换、插入、删除等操作将字符串 1 转换为字符串 2 所需要操作的最少字符数
  • 该算法的复杂度为O(m*n),其中mn分别为两个字符串的长度
  • 字符串长度不能大于 255,否则返回 -1

2. 语法

levenshtein ( string $str1 , string $str2 ) : int

levenshtein ( string $str1 , string $str2 , int $cost_ins , int $cost_rep , int $cost_del ) : int

3. 参数说明

参数 可选性 数据类型 描述
$str1 必需 字符串 计算编辑距离的第一个字符串
$str2 必需 字符串 计算编辑距离的第二个字符串
$cost_ins 必需 整型 规定插入的次数
$cost_rep 必需 整型 规定替换的次数
$cost_del 必需 整型 规定删除的次数

4. 示例

<?php

// levenshtein()
// 计算两个字符串之间的编辑距离(Levenshtein)

$str1 = 'hello, world';
$str2 = 'hello, PHP';

// 替换三次,删除两次
$res = levenshtein($str1, $str2);
var_dump($res); // 输出:int(5)

// 替换3次 * 20 = 60,删除2次 * 25 = 50,60 + 50 = 110
$res = levenshtein($str1, $str2, 15, 20, 25);
var_dump($res); // 输出:int(110)

5. 延展阅读

  • soundex():利用英文字符的读音计算近似值
  • similar_text():根据Programming Classics: Implementing the World's Best Algorithms by Oliver (ISBN 0-131-00413-1)算法计算两个字符串的相似度
  • metaphone():语音算法,利用较大的英语发音规则计算近似值