у меня проблемы с пониманием этой реализации алгоритма 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 алгоритм в своих веб-приложениях, и я хочу использовать его для поиска строки
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);
});
это, наконец, работает как шарм, и, кстати, этот kmp находит строку и сообщает, в какой позиции данные, которые вводятся, но можно ли ее изменить вместо того, чтобы получать кучу позиции номера строки, как я могу добиться с выделенным текстом?
Это отдельный вопрос с другим ответом, извините. если это тот, который вы использовали после того, как отметьте его правильно (зеленая галочка), затем задайте другой вопрос о переполнении стека :)
о, это использование foreach