2012-07-04 59 views
0

即時使用下面的代碼來搜索相似的文本。但由於某種原因,無論我搜索什麼,它只會返回相同的值。有人可以看到問題可能是什麼?類似文本搜索

$result = mysql_query("SELECT keyword FROM search"); 
$storeArray = Array(); 
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 
$storeArray[] = $row['keyword']; 
     } 
foreach ($storeArray as $key){ 
    //echo "'".$key."'"; 
} 



$my_word = $_POST['value']; 

$all_words = array(
"'".$key."'" 
); 

$bestMatch = array('word' => $my_word, 'match' => 2); 

foreach($all_words as $word) { 
similar_text($word, $my_word, $percent); 
if($percent > $bestMatch['match']) $bestMatch = array('word' => $word, 'match' =>  $percent); 
} 

if($bestMatch['match'] < 100) echo 'Did you mean: <strong>' . $bestMatch['word'] . '</strong>'; 

回答

1

我編輯了一下,告訴我這是不是你想要的。

$my_word = $_POST['value']; 
$bestMatch = array('word' => $my_word, 'match' => 2); 
$result = mysql_query("SELECT keyword FROM search"); 
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 
      //run similar text on each row 
     similar_text($row['keyword'], $my_word, $percent); 
      //if row has a better score, overwrite $bestMatch 
     if ($percent > $bestMatch['match']) 
      $bestMatch = array('word' => $row['keyword'], 'match' => $percent); 
} 
if ($bestMatch['match'] < 100) 
    echo 'Did you mean: <strong>' . $bestMatch['word'] . '</strong>'; 

編輯:不要忘記similar_text被證明只給單詞的好成績誰已經有很大的相似性(在長度方面爲主),我認爲這是一個80%的相似性(組合這兩個字符計數和長度)。不是100%確定,但...

+0

我收回...工作正常.. –

+0

沒有硬的感覺=) –

0

看來你正在代碼中這樣做,只能解釋得到一個結果。

$all_words = array(
    "'".$key."'" 
); 

foreach($all_words as $word) { 
    // ... 
} 

你正在做的是運行在一個$keyforeach(),它不存在,並因此獲得最匹配的'' ..這將永遠是同樣的事情。

試着改變那foreach()foreach($storeArray as $word),或類似的東西。

這裏有一些調試策略 - 把這個代碼放在if($bestMatch['match'] < 100)以上。

echo '<pre>'; 
echo $my_word; 
print_r($storeArray); 
print_r($all_words); 
echo '/<pre>'; 

你要尋找的是$all_words包含所有你想上運行similar_text()的話。

+0

當我添加調試代碼讓我的陣列預期....陣列 ( [0] =>計劃管理 [1] => ScanSharp [2] => ResultsCall [ 3] =>必填字段 [4] => ReminderCall [5] => Practice manager admin –