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>';
4

2 回答 2

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% 确定...

于 2012-07-04T01:08:22.813 回答
0

看来您正在代码中执行此操作,并且只能解释得到一个结果。

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

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

你正在做的是运行一个不存在的foreach()on $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()

于 2012-07-04T01:10:09.337 回答