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

时间:2017-06-07 06:47:18

标签: php arrays string-comparison levenshtein-distance substring

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

以下是我的情景:

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

如果我的输入为Noise,我想同时获得Break NoiseEngine Noise

有可能吗?

levenshtein()仅返回Break Noise这是第一个元素。

1 个答案:

答案 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()对数组进行排序。