phplaravelstringknuth-morris-pratt

How to Implemented Knutt Morris Pratt Algorithm in Laravel?


i have trouble understanding this implementation KMP algorithm in laravel is there a way to implemented KMP Algorithm into laravel app based?

i want to convert this script from native into framework script i seem cant find anything in google about Knutt Morris Pratt implemented in laravel based

`<?php
$c  = mysql_connect("localhost", "root", "");
$db = mysql_selectdb("web", $c);
 
if(!$db){
    echo "Purchase DB! :p";
    exit();
}
 
include_once("kmp.php");
$kata = '';
if(isset($_GET['word']))
  $kata = $_GET['word'];
 
?>
<div style="width:600px;">
<form method="get" action="">
Find Word : <input type="text" name="word" value="<?php echo $word; ?>" /> <input type="submit" value="Find">
</form>
</div>
<?php
$KMP = new KMP();
 
$art = mysql_query("select * from article");
while($teks = mysql_fetch_array($art)){
 
  if($word!=''){
    $result = $KMP->KMPSearch($word,$text['content']);
 echo "The word you are looking for is : ".$word."<br/>";
 echo "Number of words found : ".count($result)."<br/>";
 echo "That is at the position of the string to : ";
 foreach($result as $h) echo $h." ";
 echo "<br/>";
  }
  echo "<div style='width:600px;'>";
  echo "<h3>".$text['title']."</h3><hr/>";
  echo nl2br(str_replace($word,"<font color='red'>".$word."</font>",$text['content']));
  echo "</div>";
}
?>`

i need to use this code because my essay need me to implemented at least 1 algorithm in my web apps and i want to use it for finding string


Solution

  • Laravel uses a structure called PSR4

    Create a folder called Services under app and create a new file, call it KMP.php

    <?php
    namespace App\Services;
    
    class KMP
    {
        public static function search($string, $pattern)
        {
            $retVal = array();
            $M = strlen($pattern);
            $N = strlen($string);
            $i = 0;
            $j = 0;
            $lps = array();
    
            self::computeLPSArray($pattern, $M, $lps);
    
            while ($i < $N) {
                if ($pattern[$j] == $string[$i]) {
                    $j++;
                    $i++;
                }
    
                if ($j == $M) {
                    array_push($retVal, $i - $j);
                    $j = $lps[$j - 1];
                } elseif ($i < $N && $pattern[$j] != $string[$i]) {
                    if ($j != 0) {
                        $j = $lps[$j - 1];
                    } else {
                        $i = $i + 1;
                    }
                }
            }
    
            return $retVal;
        }
    
        private static function computeLPSArray($pattern, $m, &$lps)
        {
            $len = 0;
            $i = 1;
    
            $lps[0] = 0;
    
            while ($i < $m) {
                if ($pattern[$i] == $pattern[$len]) {
                    $len++;
                    $lps[$i] = $len;
                    $i++;
                } else {
                    if ($len != 0) {
                        $len = $lps[$len - 1];
                    } else {
                        $lps[$i] = 0;
                        $i++;
                    }
                }
            }
        }
    }
    
    

    Now run composer du in your terminal which will dump the autoload file and look for new files.

    then you can use it like so.. in your routes for instance

    web.php

    <?php
    
    use Illuminate\Http\Request;
    use App\Services\KMP;
    
    Route::get('/test', function () {
        $data = "the quick brown fox jumps over the lazy dog";
        $value = KMP::search($data, "the");
        dd($value);
    });