2016-05-12 70 views
0

我有2个表和方案是这样的:如何在php中实现字符串匹配的蛮力算法?

tb_keywords

id_keyword 
keyword 

tb_post

id_post 
description 

我想要实现在PHP蜇匹配蛮力算法。如果描述符合/类似于关键字,则此描述将插入到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'循环,并且永远不会到达'for'循环之后的部分代码。据我了解,您必须尝试在说明中找到关键字,但对于不区分大小写的情况,使用[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

正则表达式使用[** Thompson算法**](https://en.wikipedia.org/wiki/Thompson's_construction) –

+0

对不起,我必须使用蛮力算法。我无法改变它,因为在我的提议中,我写了强力字符串匹配算法,我使用。无论如何谢谢你回答我的问题。 –