使用以下代码搜索类似的文字。但由于某些原因,无论我搜索什么,它都只返回相同的值。有人可以看到问题可能是什么?
$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>';
答案 0 :(得分: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%肯定...
答案 1 :(得分:0)
看来你在代码中这样做了,只能解释一个结果。
$all_words = array(
"'".$key."'"
);
foreach($all_words as $word) {
// ...
}
你正在做的是在foreach()
上运行$key
,这不存在,因此获得与''
最接近的匹配...这将永远是同一件事
尝试将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()
上运行的所有字词。