如何从数组中获取所有最接近的匹配字符串?
How to get all closest matched strings from an array?
我正在尝试从数组中找到最接近的匹配项。为此,我使用 levenshtein()
,但 levenshtein()
returns 仅第一个匹配的字符串或第一个最接近的匹配。
这是我的场景:
$words = array('Break Noise','Engine Noise','Vehicle is jerking');
如果我的输入是Noise
,我想得到Break Noise
和Engine 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()
.
对数组进行排序
我正在尝试从数组中找到最接近的匹配项。为此,我使用 levenshtein()
,但 levenshtein()
returns 仅第一个匹配的字符串或第一个最接近的匹配。
这是我的场景:
$words = array('Break Noise','Engine Noise','Vehicle is jerking');
如果我的输入是Noise
,我想得到Break Noise
和Engine 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()
.