我正在尝试从数组中找到最接近的匹配项。为此,我使用levenshtein()
,但levenshtein()
仅返回第一个匹配的字符串或第一个最接近的匹配。
以下是我的情景:
$words = array('Break Noise','Engine Noise','Vehicle is jerking');
如果我的输入为Noise
,我想同时获得Break Noise
和Engine Noise
。
有可能吗?
levenshtein()
仅返回Break Noise
这是第一个元素。
答案 0 :(得分:3)
在得到两个upvotes后,我很想把这个答案留在屏幕上。
$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',
)
这将首先滤除"无噪音"元素,然后使用levenshtein()
对数组进行排序。