2016-05-12 16 views
0

Ich habe 2 Tabellen und Schemata sind wie folgt aus:Wie Brute-Force-Algorithmus für String-Matching in PHP implementieren?

tb_keywords

id_keyword 
keyword 

tb_post

id_post 
description 

I Brute-Force-Algorithmus für sting Matching in PHP implementieren möchten. Wenn die Beschreibung mit Keyword übereinstimmt/ähnlich ist, wird diese Beschreibung in tb_post eingefügt. Ich habe versucht, das funktionieren zu lassen, aber es funktioniert nicht. Es gibt keine Fehlermeldung, gab nur das leere Ergebnis.

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

Code hat einige Probleme. es wird nie 'for'-loop weitermachen und niemals nach der' for'-Schleife zu einem Teil des Codes gelangen. Wie ich verstehe, müssen Sie versuchen, ein Schlüsselwort in der Beschreibung zu finden, aber es wird einfacher sein, [stripos()] (http://php.net/manual/ru/function.stripos.php) für die Groß-/Kleinschreibung zu verwenden Suche. – Wizard

Antwort

0

wenn ein bestimmtes Wort in Text sehen Sie einen regulären Ausdruck mit Wortgrenzen verwenden können.

dh

preg_match ("/ \ BPHP \ b /", "Regex in PHP") # Spiel das Wort "PHP" in String

$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

Verwendet dieser Code immer noch Brute-Force-Algorithmus? –

+0

Regex verwendet [** Thompson-Algorithmus **] (https://en.wikipedia.org/wiki/Thompson's_construction) –

+0

Entschuldigung, ich muss Brute-Force-Algorithmus verwenden. Ich kann es nicht ändern, weil ich in meinem Vorschlag Brute Force als String-Matching-Algorithmus geschrieben habe, den ich verwende. Wie auch immer, danke für die Beantwortung meiner Frage. –

Verwandte Themen