Как реализовать алгоритм Кнутта Морриса Пратта в Laravel?

у меня проблемы с пониманием этой реализации алгоритма KMP в laravel Есть ли способ внедрить алгоритм KMP в приложение laravel?

я хочу преобразовать этот скрипт из нативного в скрипт фреймворка Кажется, я не могу найти ничего в Google о Кнутте Моррисе Пратте, реализованном на основе laravel.

`<?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>";
}
?>`

мне нужно использовать этот код, потому что мое эссе требует, чтобы я реализовал по крайней мере 1 алгоритм в своих веб-приложениях, и я хочу использовать его для поиска строки

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
35
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Laravel использует структуру под названием ПСР4.

Создайте папку с именем Services в приложении и создайте новый файл, назовите его 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++;
                }
            }
        }
    }
}

Теперь запустите composer du в своем терминале, который выгрузит файл автозагрузки и найдет новые файлы.

тогда вы можете использовать его так .. например, в своих маршрутах

веб.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);
});

о, это использование foreach

kzehaya 23.03.2022 07:33

это, наконец, работает как шарм, и, кстати, этот kmp находит строку и сообщает, в какой позиции данные, которые вводятся, но можно ли ее изменить вместо того, чтобы получать кучу позиции номера строки, как я могу добиться с выделенным текстом?

kzehaya 23.03.2022 08:07

Это отдельный вопрос с другим ответом, извините. если это тот, который вы использовали после того, как отметьте его правильно (зеленая галочка), затем задайте другой вопрос о переполнении стека :)

Michael Mano 24.03.2022 00:21

Другие вопросы по теме