如何从数组中获取所有最接近的匹配字符串?

How to get all closest matched strings from an array?

我正在尝试从数组中找到最接近的匹配项。为此,我使用 levenshtein(),但 levenshtein() returns 仅第一个匹配的字符串或第一个最接近的匹配。

这是我的场景:

$words = array('Break Noise','Engine Noise','Vehicle is jerking');

如果我的输入是Noise,我想得到Break NoiseEngine Noise

可以吗?

levenshtein() returns 只有我 Break Noise 这是第一个元素。

获得两次赞成票后,我忍不住在屏幕上留下了这个答案。

$input="Noise";
$words = array('Break Noise','Engine Noise','Noises','Vehicle is jerking','Nose','noise');
$filtered=array_filter($words,function($v)use($input){return stripos($v,$input)!==false;});

usort($filtered,function($a,$b)use($input) {
    return levenshtein($input,$a)>levenshtein($input,$b)?1:-1;
});

var_export($filtered);

输出:

array (
  0 => 'Noises',
  1 => 'noise',
  2 => 'Break Noise',
  3 => 'Engine Noise',
)

这将首先过滤掉 "Noise-less" 个元素,然后使用 levenshtein().

对数组进行排序