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

Aleh
18.08.2016
21:47:31

Sergey
18.08.2016
21:48:18

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
больше не могу думать....пойду посплю
местами менл?