0

我试图让这段代码正常工作,但我一生都无法让它继续下去......我想要一个显示“你的意思是什么”的搜索。有了代码,我得到了它“你的意思是:数组 l:6”我在这里有什么问题?

$my_word = $_REQUEST['value'];
$bestMatch = array('word' => $my_word, 'match' => 2);
$result = mysql_query("SELECT keyword FROM athena");
while ($keyword = mysql_fetch_array($result)) {
    $lev = levenshtein ($keyword, $my_word, 1, 2, 1);
    if (!isset($lowest) || $lev < $lowest) {
       $bestMatch = array('word' => $keyword, 'match' => $lev);
       $lowest = $lev;
     }
 }
 if ($bestMatch['match'] > 0)
   echo 'Did you mean: <strong>'.$bestMatch['word'].'</strong> l:'.$bestMatch['match'];
4

4 回答 4

4

您将整个搜索结果集传递给levenshtein()函数而不是关键字:

while ($row= mysql_fetch_array($result)) {
    $lev = levenshtein ($row['keyword'], $my_word, 1, 2, 1);
    if (!isset($lowest) || $lev < $lowest) {
       $bestMatch = array('word' => $row['keyword'], 'match' => $lev);
       $lowest = $lev;
    }
}
于 2012-07-04T14:07:32.203 回答
1

$keyword 是一个数组(一维),而不是单列。你应该 mysql_fetch_field 你想要的列

于 2012-07-04T14:12:59.833 回答
0
<?php
while ($keyword = mysql_fetch_array($result))
?>

$keyword 是一个数组!您的单词在 $keyword[0] 或 $keyword['keyword'] 中。将您的第 7 行替换为

$bestMatch = array('word' => $keyword['keyword'], 'match' => $lev);
于 2012-07-04T14:08:55.660 回答
0

正如PeeHaajeroen已经说过的,MySQL 结果返回一个数组。

把它倒出来看看里面有什么

if ($bestMatch['match'] > 0) {
  var_dump($bestMatch['word']);
  echo 'Did you mean: <strong>'.$bestMatch['word'].'</strong> l:'.$bestMatch['match'];
}

很可能那里还有另一个 [ ] ,所以这可能有效:

echo 'Did you mean: <strong>'.$bestMatch['word'][0].'</strong> l:'.$bestMatch['match'];
于 2012-07-04T14:11:28.260 回答