2016-12-25 9 views
0

我想寫一個腳本,可以給我的值不準確,但接近用戶輸入的值。例如:它就像字符串比較。比較用戶查詢的字符。需要編寫一個php腳本,將顯示值接近用戶輸入的值

數據存儲在SQL中。例如:

$string1="Where were you"; 
$string2="where ere youuu"; 

$string1是存儲在數據庫中的值。

$string 2是用戶值。

它應該返回的輸出是這樣的:

where were you 

我有這一點,但它不是爲我工作的罰款:

$a = "hello where are you"; 
$b = "hell re r u"; $str = ""; 

for ($i=0; $i < strlen($a); $i++) { 
    for ($j=0; $j < strlen($b); $j++) { 
     if ($a[$i]==$b[$j]) { 
      $str.=$a[$i]; 
      break; 
     } 
    } 
} 
echo $str; 

它不會放棄希望的結果。

+1

有各種各樣的方法來此,如各種字符串比較算法來確定兩個字符串之間的「距離」,或如「同音」使用的東西( https://en.wikipedia.org/wiki/Soundex)。 – David

+1

你如何定義「準確的結果」?這不是一件微不足道的事情。 – kabanus

+0

我認爲你想要的是一個非常嚴肅的搜索邏輯,當然這不會發生在兩個「for」循環中。嘗試在Google上搜索某種全文搜索實現。給我們更多的細節。如果數據在SQL服務器上,請嘗試將數據塊分成塊並執行「LIKE」 – codtex

回答

0

我不得不處理類似的問題,用戶輸入可能會有拼寫錯誤和部分單詞。

我試過使用PHP的soundex函數,但在我的經驗中,它導致了很多誤報。然後我嘗試了metaphone功能,它比soundex更好。然後還有levenshtein函數,用於計算兩個字符串之間的距離,爲您提供必須添加,刪除或更改的字符數,以便從另一個字符串中獲取一個字符串。你可以使用這些組合來獲得更準確的結果。

但是,據我所知,達到100%的準確度對所有的用戶輸入都是不可能的。對於某些用戶輸入,您可以提供100%準確的結果,而對於其他用戶,您可以提供用戶選項以供選擇。

參考頁:soundexmetaphonelevenshtein

相關問題