1

levenshtein()で使用するための「最良の」オプションを見つけようとしていますPHP

ユーザーが新しい顧客をDBに入力するときに、PDOステートメントを使用しています。

私がやりたいのは、新しい顧客が追加される前に、クエリ検索を行い、その顧客がデータベースにすでに存在するかどうかを確認して、重複エントリの可能性を回避することです。MATCH/AGAINSTどちらの場合もお客様の入力が異なる可能性があるため、使用できません。

これにより、データベースに対して名がチェックされます。

$input1 = $_POST['FIRSTNAME'];

$result = array();
$count=1;
            $find = $dbh->query('SELECT BillingFirstName FROM Customers');

            while ($row = $find->fetch (PDO::FETCH_ASSOC))
                 {
                    $fn = $row['BillingFirstName'];
                    array_push($result, $fn);
                 }


        foreach ($result as $word) {

                    echo $word.'<br>';

                        $shortest = -1;
                        $lev = levenshtein($input1, $word);

                    if ($lev == 0) {

                        $closest = $word;
                        $shortest = 0;
                        break;
                    }

                    if ($lev <= $shortest || $shortest < 0) {

                        $closest  = $word;
                        $shortest = $lev;
                    }

            }


        echo "Input word: $input1\n";
        if ($shortest == 0) {
            echo "Exact match found: $closest\n";
        } else {
            echo "Did you mean: $closest?\n";
        }

姓、住所、州、郵便番号など、残りの詳細をどのように追加しますか。

さらに追加することはできますか、それとも配列を作成してアドレスの各部分でループする必要がありますか?

4

1 に答える 1

1

特にdbが任意のサイズの場合、これは非常に遅くなります。使用する必要があるのは、MySQLのレーベンシュタイン関数です(phpではありません)。

ここに良いものがあります:レーベンシュタイン距離

于 2012-10-23T19:27:48.227 に答える