2016-05-12 5 views
0

は、私は2つのテーブルを持っており、スキームは、このようなものです:どのようにPHPで文字列照合のブルートフォースアルゴリズムを実装するには?

tb_keywords

id_keyword 
keyword 

tb_post

id_post 
description 

私はPHPで刺さマッチングのためのブルートフォースアルゴリズムを実装したいです。 descriptionがkeywordと適合/類似している場合、この説明はtb_postに挿入されます。私はこの作業をしようとしましたが、うまく機能しません。 エラーメッセージは表示されず、空白の結果が表示されます。

HTML

<textarea type="text" class="form-control" name="description" id="description" placeholder="Description" required /></textarea> 

PHP

$description = trim($_POST['description']); 
$check = $db_con->prepare("SELECT * FROM tb_keywords"); 
$check->execute(); 
$row=$check->fetch(PDO::FETCH_OBJ); 
$positive = $row->keyword; 

function brute_force($positive, $description) 
{ 
    $n = strlen($description); 
    $m = strlen($positive); 
    for ($i = 0; i < $n-$m; $i++) { 
     $j = 0; 
     while ($j < $m && $description[$i+$j] == $positive[$j]) { 
      $j++; 
     } 
     if ($j == $m) { 
      return $i; 
     } 
     return -1; 
    } 
    $find[$i]=brute_force($positive, $description); 
    $create=$db_con->prepare("INSERT INTO tb_post(description) VALUES(:description)"); 
    $create->bindParam(":description", $description); 
    $create->execute(); 
    $row=$create->rowCount(); 
    if($row>0) { 
     echo "success"; 
    } else { 
     echo "fail"; 
    } 

} 
+0

あなたのコードがあり、いくつかの問題。 'for'-loopを続けることはなく、' for'-loopの後にコードの一部に到達することはありません。私が理解しているように、説明の中でキーワードを見つけようとする必要がありますが、[stripos()](http://php.net/manual/ru/function.stripos.php)を大文字と小文字を区別しないサーチ。 – Wizard

答えて

0

特定の単語がテキストである場合、あなたはワード境界で正規表現を使用することができます参照してください。

すなわち

するpreg_match( "/ \ bPHP \ B /"、 "PHPで正規表現")#マッチ単語 "PHP" 文字列では

$description = trim($_POST['description']); 
$check = $db_con->prepare("SELECT * FROM tb_keywords"); 
$check->execute(); 
while($row = $check->fetch(PDO::FETCH_ASSOC)) { 
    $search = $row['keyword']; 
    if (preg_match("/\b$search\b/", $description)) { 
     $create=$db_con->prepare("INSERT INTO tb_post(description) VALUES(:description)"); 
     $create->bindParam(":description", $description); 
     $create->execute(); 
     $row=$create->rowCount(); 
     if($row>0) { 
      echo "success"; 
     } else { 
      echo "fail"; 
     } 
    } 
} 
+0

このコードは引き続きブルートフォースアルゴリズムを使用していますか? –

+0

Regexは[** Thompson algorithm **](https://en.wikipedia.org/wiki/Thompson's_construction) –

+0

を使用しています。申し訳ありませんが、ブルートフォースアルゴリズムを使用する必要があります。私の提案では、私が使用する文字列照合アルゴリズムとしてブルートフォースを書いているので、私はそれを変更することはできません。とにかく、私の質問に答えてくれてありがとう。 –

関連する問題