@phpgeeks

Страница 636 из 8430
Sergey
19.08.2016
10:21:30
в случае с примером Алеха мы получаем чистую арифметическую прогрессию по длинне изменяемой строки

6,8,10,12 и т.п.

я решил добавить в функцию немного кода, который может распознать арифметическую прогрессию

Google
Anonymous*
19.08.2016
10:25:53
и по-мему не обязательно A1

но я не шарю у я двоечник

Aleh
19.08.2016
10:27:40
a => 1b1 1b1 => 11c11 11c11 => 111d111 вроде тоже прогрессия, но не циклится. a1a => aaaaaa a1a1a1a1a закончит свое выполнение через два прогона и тоже прогрессия

Sergey
19.08.2016
10:28:22
ну и отлично )

пускай заканчивается )

Aleh
19.08.2016
10:28:52
ну, можно придумать через 40 прогонов)

Sergey
19.08.2016
10:50:33
$replace_matching = $this->replace_matching; /** * Рекурсивная замена * * В голову пришли три возможные проблемы: * 1. Если исходная строка будет вида aaa bbb ccc, а массив соответствий будет вида array("aaa"=>"bbb", "bbb"=>"aaa") * Решением этой проблемы стал массив $hash в котором я храню все хеши строк и если во время рекурсии хеш повторился - * значит мы попали в бесконечную рекурсию и нужно вернуть строку, закончив выполнение функции * * 2. Если исходная строка будет вида aaa bbb ccc, а массив соответствий будет вида array("aaa"=>"aaa111") * В этом случае хеши нам не помогут, т.к. строка aaa будет сначала заменена на ааа111, потом на ааа111111, потом на ааа111111111 и * каждый раз хеш будет разный, но решение есть! Я проверяю вхождение старой подстроки(ааа) в новую подстроку(ааа111), и * если вхождения есть, то я считаю кол-во вхождений в основной текст как старой подстроки, так и новой. Далее есть два варианта: * a) кол-во вхождеий старой подстроки и новой отличаются, тогда все новые подстроки я заменяю старыми * б) кол-во вхождение и старой и новой подстроки равны, тогда я пропускаю замену * * 3. Арифметическая прогрессия! Если на вход подать строку вида "cd", а массив соответствий будет вот такого вида: array("c"=>"1a", "d"=>"a2", "aa"=>"cd"), * то мы попадем в бесконечную рекурсию. Но для этого случая я использую свойство арифметической проргессии An = A1+D(n-1). Соответственно, если * с какого-то шага кол-во замен на прошлом и текущем шагу не изменилось, я добавляю в массив $progression текущую длинну строки, * и при достижении длинны в 5 элементов проверяю соответствют ли элементы массива арифметической прогрессии */ $recursive_replacer = function($content, array $hash = array(), $prev_counter = 0, array $progression = 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; } } //Если замен не было или хеш измененной строки уже встречался в массиве $hash, то возвращаем измененную строку if ($counter == 0 || in_array(md5($content), $hash)) { return $content; } //Проверка на арифметическую прогрессию if ($counter == $prev_counter) { $progression[] = mb_strlen($content); if (count($progression) > 5) { $D = $progression[count($progression) - 1] - $progression[count($progression) - 2]; $is_progression = true; for ($i = (count($progression) - 4); $i <= count($progression); $i++) { $A = $progression[0] + $D * ($i - 1); if ($progression[$i - 1] != $A) { $is_progression = false; } } if ($is_progression == true) { return $content; } } }

return $recursive_replacer($content, $hash, $counter, $progression); };

Вот

всё, ничего не буду больше трогать )

(;¬_¬)
19.08.2016
10:50:56
ничего нет
погоди... как ничего нет.... а тут где ошибка вылетает? https://github.com/iamdevice/opencart-spsr-integration/blob/master/admin/controller/shipping/spsr.php

Google
Aleksandr
19.08.2016
10:51:15
нет

у меня ощущение что он валится на переключении фильтра на следующую порцию

(;¬_¬)
19.08.2016
10:51:40
О_о...

просто кроме как вот тут у тебя в файле это нигде не юзается https://github.com/iamdevice/opencart-spsr-integration/blob/master/admin/controller/shipping/spsr.php#L98-L100 и он тут не выкидывает ошибку?

Aleh
19.08.2016
10:54:44
Вот
чет вообще не работает)

Sergey
19.08.2016
10:54:50
Раобтает )

Aleh
19.08.2016
10:54:59
$replace_matching = [ "aa" => "cd", "c" => "1a", "d" => "a2" ];

echo $recursive_replacer("ac");

Sergey
19.08.2016
10:55:22
ну бля...

ща )

Sergey
19.08.2016
11:00:16
http://www.phpthewrongway.com/

Aleh
19.08.2016
11:00:16
$replace_matching = [ "a" => "1b1", "1b1" => "11c11", "11c11" => "111d111" ]; echo $recursive_replacer("a");

Sergey
19.08.2016
11:03:02
$replace_matching = [ "aa" => "cd", "c" => "1a", "d" => "a2" ];
c Этим норм работает результат a1a

Aleh
19.08.2016
11:03:29
http://www.phpthewrongway.com/
идея норм, сделано отстойно, чисто мнение без конкретных фактов.

c Этим норм работает результат a1a
ты что-то правил? я просто скопировал твою функцию

Sergey
19.08.2016
11:04:09
Aleh
19.08.2016
11:04:28
Не, ниче - в консоли запустил
ну вот у меня ничего не выводит

и кстати

Sergey
19.08.2016
11:05:39
Короче, бог с ним. Схожу и узнаю как правильно....ну, если не окажется, что нужно было в php.ini максимальную рекурсию установить или что-то типа того )

Google
Sergey
19.08.2016
11:11:21
парни, спасибо за помощь еще раз

Aleksandr
19.08.2016
11:22:37
в общем разобрался я с косяком

я в классе фильтра указал неправильное присваивание для конечной строки

и вот теперь другой вопрос… время работы скрипта увеличилось на порядок в какую сторону курить в плане оптимизации?

Sergey
19.08.2016
11:24:33
это ты с PHPЭкселем?

сделал разбитие на чанки?

Aleksandr
19.08.2016
11:29:33
да

щас проверю последние правки и запушу

за 4 минуты только 3000 строк из 58к ?

Sergey
19.08.2016
11:35:34
ты онлидата тоже флажек поставил?

Ну, вообще, у меня 100 меговый файл где-то 4 часа порциями по 2000 лопатился )

[Anonymous]
19.08.2016
11:36:32
Салам мужики , Yii2 или CakePHP ?

F01134H
19.08.2016
11:38:29
Laravel

Vadim
19.08.2016
11:38:57
а может вообще silex? смотря зачем

[Anonymous]
19.08.2016
11:40:29
собрался выучить framework , не могу определится

Никто ??
19.08.2016
11:46:05
Зачем старье всякое учить

Учи laravel, выучишь будешь в коворкинге бесплатное смузи получать

[Anonymous]
19.08.2016
11:47:06
м,а laravel за границой популярен ?

то есть e-work

Артур Евгеньевич
19.08.2016
11:47:15
Салам мужики , Yii2 или CakePHP ?
если есть амбиции работать в перспективе за доллары то ларавел

Google
Никто ??
19.08.2016
11:47:21
В зависимости от того насколько ты популярен

За границей

Артур Евгеньевич
19.08.2016
11:47:33
а если нет то и Yii сойдет)

но я вно не cakePhp

боль
19.08.2016
11:48:07
kekPHP

[Anonymous]
19.08.2016
11:48:07
просто по запросу в гугл . мне приходит cakephp top 1

Никто ??
19.08.2016
11:49:04
Да yii2 уже морально устарел в сравнении с laravel, не говоря о пироге каком-то

Вообще впервый раз слышу о таком

Admin
ERROR: S client not available

Артур Евгеньевич
19.08.2016
11:49:44
щас бы в разговор хорошо вписался фрик с криками бросайте PHP учите Ruby))

Никто ??
19.08.2016
11:49:57
Пфф руби

(;¬_¬)
19.08.2016
11:49:59
бросайте PHP учите Python!

?

Aleksandr
19.08.2016
11:50:07
Ну, вообще, у меня 100 меговый файл где-то 4 часа порциями по 2000 лопатился )
https://github.com/iamdevice/opencart-spsr-integration/blob/master/admin/controller/shipping/spsr.php вот код

боль
19.08.2016
11:50:16
Бросайте кодить, идите на завод!

Никто ??
19.08.2016
11:50:25
Даже хипстеры отморозки уже руби свой бросили

Артур Евгеньевич
19.08.2016
11:50:27
Бросайте программирование возите молоко) http://www.city-n.ru/view/383558.html

?
19.08.2016
11:50:31
Google
?
19.08.2016
11:50:36
выгоните его ?

(;¬_¬)
19.08.2016
11:50:40
??

Никто ??
19.08.2016
11:50:45
Давненько не видел этих аутяг который везде свой рубин толкают.

Артур Евгеньевич
19.08.2016
11:50:47
это у нас в глубинке) сколько же в москве молоково з получает

?
19.08.2016
11:50:56
я вот поел вкусно мяса

Vadim
19.08.2016
11:50:57
?
19.08.2016
11:51:00
залил пивом

Vatasik
19.08.2016
11:51:02
бросайте работать, помогайте детям в африке

?
19.08.2016
11:51:05
как работать теперь?

Vatasik
19.08.2016
11:51:32
как работать теперь?
после арбуза тоже работать не получается

Никто ??
19.08.2016
11:51:34
Зачем работать если ты уже поел?

[Anonymous]
19.08.2016
11:51:51
??????

боль
19.08.2016
11:51:52
это у нас в глубинке) сколько же в москве молоково з получает
Так он с собственной машиной. Весь ремонт, техобслуживание, лицензии и прочее на нём.

Никто ??
19.08.2016
11:51:54
Вот если нечего есть можно и поработать

Артур Евгеньевич
19.08.2016
11:52:01
от одного молоковоза толку больше чем от двух питонистов)) https://s.mail.ru/Fm2c/8hbxov6VB

Vatasik
19.08.2016
11:52:18
Зачем работать если ты уже поел?
а потому что еда есть а есть то не хочется, вот и надо поработать что бы проголодатся

(;¬_¬)
19.08.2016
11:52:25
https://github.com/iamdevice/opencart-spsr-integration/blob/master/admin/controller/shipping/spsr.php вот код
если строк ну очень много, вот это место может тупить https://github.com/iamdevice/opencart-spsr-integration/blob/master/admin/controller/shipping/spsr.php#L104-L106 ну по крайне мере у меня подтупливало когда я хотел заранее узнать количество строк в файлике где их было порядка 10к-20к

?
19.08.2016
11:52:44
солнце ещё высоко

[Anonymous]
19.08.2016
11:52:50
кстати Python!

(;¬_¬)
19.08.2016
11:52:57
солнце ещё высоко
плеткой не машет?

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