@phpgeeks

Страница 630 из 8430
Сергей
18.08.2016
21:47:29
надо подумать как остановить

Aleh
18.08.2016
21:47:31
и если бесконечная рекурсия, то надо как-то это понять
Самый простой вариант "в лоб" запоминай все строки, которые получаешь после каждой замены. Если получил уже сохраненнуб строку - ты в рекурсии

Aleh
18.08.2016
21:48:22
А, это для моего прохода

Google
Sergey
18.08.2016
21:48:35
потому что длинна строки будет меняться с каждым проходом рекурсии

это все может меняться

во время замен

Aleh
18.08.2016
21:49:43
Тогда надо искать не прямое совпадение, а совпадение как подстроки

Если уже известная строка является подстрокой новой замены, то ты в рекурсии

Если ничего не изменилось, то ты получил результат )

Sergey
18.08.2016
21:51:31
хм...

Aleh
18.08.2016
21:53:14
?

strpos?

Искать все предыдущие в новой

Я пока в своей уже неработающкй голове не могу найти опровержения

Но и доказать сейчас не смогу)

Можно помнить не все предыдущие замены, а столько, сколько есть правил, мне кажется

Google
Aleh
18.08.2016
21:57:10
Период не будет больше

Sergey
18.08.2016
21:58:13
блин

а ведь можно же считать

ща, как бы мысль не потерять

Aleh
18.08.2016
21:59:11
Да, норм

Sergey
18.08.2016
21:59:13
у нас есть, допустим, три замены

после первой замены должна пройти 2 и 3

после 2 - 3 и 1

после 3 - 1 и 2

а бля

не )

сукааааа

Сергей
18.08.2016
22:04:58
а что если рекурсивно сворачивать массив искомых значений по правилам

и проверять strpos

в новой строке

Artur
18.08.2016
22:08:41
чё тут происходит

F01134H
18.08.2016
22:13:44
жесть

Sergey
18.08.2016
22:29:18
Я кажись придумал решение

сейчас запрогаю, посмотрю

я решил с другого бока зайти

Google
Sergey
18.08.2016
22:29:47
допустим есть строка

ааа ббб ввв

и замена вида ааа=>ааа111

и я проверяю следующее: входит ли в ааа111 подстрока ааа

и если входит, то считаю кол-во подстрок ааа и ааа111 в тексте

если кол-во различается, то я тупо делаю str_replaca(aaa111, aaa, строка)

+ ко всему я передаю в каждую итерацию рекурсии хеш прошлой строки

и это помогает избежать циклов по условиям а=>b , b=>a

Admin
ERROR: S client not available

Sergey
18.08.2016
22:32:40
сейчас запрогаю

если заработает, то скину )

Не будут

Sergey
18.08.2016
22:33:32
в том то и дело

ну ща

погодите засирать

сейчас запрогаю

и проверим

Artur
18.08.2016
22:35:32
Vatasik
18.08.2016
22:48:55
Метод банной уточки кажись сработал

Sergey
18.08.2016
23:07:34
$recursive_perlacer = function($content, array $hash = array()) use($replace_matching, &$recursive_perlacer) { $hash[] = md5($content); $counter = 0; foreach ($replace_matching as $search => $replace) { $replace_flag = true; $one_phrase_counter = 0; if (strstr($replace, $search) !== false) { $clear_count = substr_count($content, $search); $replace_count = substr_count($content, $replace); if ($replace_count > 0 && $replace_count != $clear_count) { $content = str_replace($replace, $search, $content, $one_phrase_counter); } elseif ($replace_count == $clear_count) { $replace_flag = false; } } if ($replace_flag === true) { $content = str_replace($search, $replace, $content, $one_phrase_counter); $counter = $counter + $one_phrase_counter; } } if ($counter == 0 || in_array(md5($content), $hash)) { return $content; } return $recursive_perlacer($content, $hash); };

Google
Sergey
18.08.2016
23:07:41
все блять

теперь работает )

$replace_matching = array("aaaa" => "aaaa1111", "bbbb" => "aaaa"); $content = "aaaa bbbb cccc";

Vatasik
18.08.2016
23:09:45
Поздравляю

Sergey
18.08.2016
23:21:57
Очепятка

/** * Рекурсивная замена * * В голову пришли две возможные проблемы: * 1. Если исходная строка будет вида aaa bbb ccc, а массив соответствий будет вида array("aaa"=>"bbb", "bbb"=>"aaa") * Решением этой проблемы стал массив $hash в котором я храню все хеши строк и если во время рекурсии хеш повторился - * значит мы попали в бесконечную рекурсию и нужно вернуть строку, закончив выполнение функции * * 2. Если исходная строка будет вида aaa bbb ccc, а массив соответствий будет вида array("aaa"=>"aaa111") * В этом случае хеши нам не помогут, т.к. строка aaa будет сначала заменена на ааа111, потом на ааа111111, потом на ааа111111111 и * каждый раз хеш будет разный, но решение есть! Я проверяю вхождение старой подстроки(ааа) в новую подстроку(ааа111), и * если вхождения есть, то я считаю кол-во вхождений в основной текст как старой подстроки, так и новой. Далее есть два варианта: * a) кол-во вхождеий старой подстроки и новой отличаются, тогда все новые подстроки я заменяю старыми * б) кол-во вхождение и старой и новой подстроки равны, тогда я пропускаю замену */ $recursive_replacer = function($content, array $hash = array()) use($replace_matching, &$recursive_replacer) { $hash[] = md5($content); $counter = 0; foreach ($replace_matching as $search => $replace) { $replace_flag = true; $one_phrase_counter = 0; if (strstr($replace, $search) !== false) { $clear_count = substr_count($content, $search); $replace_count = substr_count($content, $replace); if ($replace_count > 0 && $replace_count != $clear_count) { $content = str_replace($replace, $search, $content, $one_phrase_counter); } elseif ($replace_count == $clear_count) { $replace_flag = false; } } if ($replace_flag === true) { $content = str_replace($search, $replace, $content, $one_phrase_counter); $counter = $counter + $one_phrase_counter; } } if ($counter == 0 || in_array(md5($content), $hash)) { return $content; } return $recursive_replacer($content, $hash); }; return $recursive_replacer($this->page_content, array()); }

вот, попытался комменты написать

F01134H
18.08.2016
23:22:31
мб тут кто-то в курсе, почему в ларе Route::get('/', function () { return 'v1'; }); Route::get('/test', function () { return 'v1'; }); первый роут пашет, второй - нет

Sergey
18.08.2016
23:22:38
больше не могу думать....пойду посплю

местами менл?

Страница 630 из 8430