0

配列から最も近い一致を見つけようとしています。このため私はlevenshtein()を使用しますが、levenshtein()は最初に一致した文字列または最初に最も近いものだけを返します。ここで配列から最も近い一致する文字列をすべて取得する方法は?

は私のシナリオです:

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

私の入力がNoiseであれば、私はBreak NoiseEngine Noiseの両方を取得したいです。

できますか?

levenshtein()は、最初の要素であるだけBreak Noise私を返します。

+1

次に距離によって配列をソート、各要素のレーベンシュタイン距離を取得します。 – Barmar

+1

あなたはそれが最も近いマッチだけを返すということを意味しますか? 'levenshtein()'は2つの文字列間の距離を示す数値を返します。 – Barmar

答えて

3

2 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()を使用して配列をソート、その後、 "ノイズレス" の要素を除外します。

+0

あなたは正しいです..私は私の答えを削除... +1良い答えです。 – NID

+0

しかし、上記のソリューションは間違いなく動作します..私は前にこれを試しました.. – NID

+0

ソリューションの大文字と小文字を区別しないようにするのは良い考えです。 – sevavietl

関連する問題