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

コードでこれを行っているようで、結果が1つしか得られないことを説明できます。

$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 に答える