«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Аноним 2018/09/23 05:08:46  №1268596 1
Аноны, сколько разы можно юзать знак ? в URL'e страницы?
Ответы: >>1268609 >>1269790
Аноним 2018/09/23 08:19:03  №1268697 2
maxresd.jpg (156, 1280x720)
720x1280
Сделал граммар нази и опечаточники. Итак.
1) Граммар нази. Тут у меня есть ощущение, что я как-то не аутентично использую функции для работы с регулярками + там же надо делать исправление больших букв и я его добавил отдельным правилом т.е. не оче умно. Но т.к. я уже долго в этом вожусь - оставил как есть.
Задача: https://ideone.com/OW5uJV
2) Опечаточники. Тут ты, ОП, в спойлере у задачки оставил примеры текстов - которые добавляют дополнительные условия, т.е. в слове может быть несколько опечаток, или англ.символы могут идти подряд, что заставляет переписывать регулярки и код. Кароче пока тоже оставил как есть.
Задача: https://ideone.com/KmRlPx
P.S. В общем мне нужен пример решения, хочется двигаться дальше. ОП'чик скинь мне на мыло vovchenkoal@yandex.ru или телегу @y0urbe3tfr1end

Ответы: >>1268731 >>1269790
Аноним 2018/09/23 09:18:59  №1268731 3
>>1268697
Эти задачи решались 1000 раз, попробуй загуглить примеры по названиям функций/комментариям/ключевым словам. В гугле не забудь добавить приставку site:ideone.com, если ничего не нашлось пробуй без неё.
Ответы: >>1269790
Аноним 2018/09/23 13:44:46  №1268987 4
maxresd.jpg (156, 1280x720)
720x1280
Дублирую из предыдущего треда.
Сделал граммар нази и опечаточники. Итак.
1) Граммар нази. Тут у меня есть ощущение, что я как-то не аутентично использую функции для работы с регулярками + там же надо делать исправление больших букв и я его добавил отдельным правилом т.е. не оче умно. Но т.к. я уже долго в этом вожусь - оставил как есть.
Задача: https://ideone.com/OW5uJV
2) Опечаточники. Тут ты, ОП, в спойлере у задачки оставил примеры текстов - которые добавляют дополнительные условия, т.е. в слове может быть несколько опечаток, или англ.символы могут идти подряд, что заставляет переписывать регулярки и код. Кароче пока тоже оставил как есть.
Задача: https://ideone.com/KmRlPx
P.S. В общем мне нужен пример решения, хочется двигаться дальше. ОП'чик скинь мне на мыло vovchenkoal@yandex.ru или телегу @y0urbe3tfr1end
Ответы: >>1268996
Аноним 2018/09/24 22:25:06  №1269790 5
ОП не пропал, просто сейчас мало времени и много работы. Думаю, это временно (как и большинство вещей в жизни).

>>1268731

Искать лучше в архиве тредов: phpclub.tech

>>1268697
>>1268987

> 1) Граммар нази.
Лучше было бы не переделывать регулярки программно, а сразу написать их в нужном виде. Это облегчит восприятие кода и не надо будет его разбирать, чтобы понять, как они трансформируются.

Читать выражения вроде $rule[2] не очень удобно, потому массив можно разобрать на переменные вручную или конструкцией list:

list($regexp, $replace, $comment) = $rule;

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

А так, сделано хорошо.

> 2) Опечаточники.

Конечно, в слове может быть несколько замененных букв, почему нет?

Код можно было упростить, если разбить текст на слова, определить язык слова (по первой букве например или как-то еще) и искать в нем все буквы другого алфавита. Заодно можно было бы найти слова с несколькими опечатками.

Готового примера решения нет, другие решения можно поискать на phpclub.tech, там есть поиск.

>>1268596

Это из тестового задания? Теоретически, много. Почитай урок про структуру URL: https://github.com/codedokode/pasta/blob/master/network/urls.md

Знак вопроса впоне может встретиться в query string и в якоре неограниченное число раз. Однако, в некоторых случаях длина URL может быть ограничена браузером или веб-сервер может отказаться принимать слишком длинный URL. Например, апач в конфигурации по умолчанию, если не путаю, имеет лимит в районе 2000 байт.
Ответы: >>1269803
Аноним 2018/09/24 23:17:19  №1269803 6
В старом треде проверил посты с 20 сент. по сегодня: >>1269790 - зайдите и посмотрите, наверняка ваша задачка проверена.

Кстати, любопытная ссылка: правила выбора формы слова в зависимости от числа (1 человек, 2 человека, 5 человек) в разных языках: http://www.unicode.org/cldr/charts/latest/supplemental/language_plural_rules.html

Анон с TDG, интересная штука, попоробую посмотреть позже.
Аноним 2018/09/25 00:48:17  №1269809 7
>>1269803
>Ну или сделать регулярку, ищущую слова из букв разных алфавитов.

Ты имеешь в виду ограничиться флагом /u или делать полноценные [aá] и т.д.?
Ответы: >>1270394
Аноним 2018/09/26 01:36:21  №1270394 8
>>1269809

Я имею в виду, искать слова, где есть буквы и латинницы, и кириллицы одновременно. Флаг u нужен в любом случае, он лишь говорит о работе с кодировкой utf-8 и нужен по сути всегда.

>>1269808

Я имел в виду вместо $i[0] использовать mb_substr($i, 0, 1) - это корректный код, так как он берет первый символ, а не первый байт. $i[0] это некорректно и описанную тобой проблему (символы в начале строки) никак не решает.

Что касается символов в начале строки - можно разбивать текст так, чтобы предложения всегда начинались с буквы. Или использовать preg_replace_callback с регуляркой, которая ищет именно первую букву предложения, а не первый символ.

>>1269806

> define('AMOUNT','(' . $number . ')');

Это плохая идея. Константу можно определить только один раз и при втором вызове функции произойдет ошибка. Также, в PHP7 используется слово const для определения константы. Тем более у тебя это не константа вообще - так как ее значение не постоянно, а зависит от переданного числа. Константы это неизменные значения. А в твоем случае нужна обычная переменная.

В общем:

- константы не создаются в функциях. Это ненормально, что функция меняет какие-то глобальные значения и не позволяет вызвать себя второй раз.
- константы это неизменные значения, а не то что у тебя

> if ($opNumber/100>=0) {
В чем смысл этого условия? Оно равносильно $opNumber >= 0.

> $firstDigit=floor($opNumber/100); $opNumber-=$firstDigit100; $firstDigit=$spelling[$firstDigit100];
Не пиши несколько команд в 1 строку, тяжело читать.

> $firstDigit=$spelling[$firstDigit*100];
Не надо использовать одну переменную для 2 разных типов значений (для числа и для строки) - это лишь усиливает путаницу.

> $x=($firstDigit&&$firstDigit!='ноль'?"$firstDigit ":'') . ($secondDigit&&$secondDigit!='ноль'?"$secondDigit ":'') . ($lastDigit&&$lastDigit!='ноль'?"$lastDigit":'');

Это нечитаемо. Тут надо использовать if/else. Также, не стоит делать сравнение со строкой. Надо было куда-то сохранить первую цифру и проверять именно ее, а не результат преобразования ее в строку. Это костыль, он сломается, если например мы поменяем написание слов или напишем их на другом языке.

> function numberToText($number,$arr=[]) {
Непонятно, зачем передавать сюда $arr. И название выбрано плохое - arr ничего не значит.

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

И еще одна проблема. Программа тут довольно сложная, и для понятности стоит разбить ее на отдельные части-функции. Так, чтобы мы могли каждую функцию рассматривать отдельно, не глядя на другие. И , например, редактировать одну функцию, не трогая другие. Чтобы каждая функция решала какую-то свою задачу.

Надо учиться разбивать задачу на подзадачи. Делать код максимально простым и понятным.

Ты же не очень к этому стремишься и сделал одну огромную функцию numberToText. Надо разбить ее на составляющие. Не надо писать стену кода.

> $preString=preg_replace('/два тысячи/u','две тысячи',$preString);
Это кривые костыли, затрудняющие понимание кода. Ну представь, человек начнет разбирать твой код, увидит, что он генерирует строку "два тысячи", подумает, что в нем ошибка. И только потом, может, увидит, что в конце эта ошибка костылем испрвляется. Но почему нельзя сделать, чтобы там сразу бралось правильное слово? Зачем усложнять все и запутывать читателя? Так не годится.

> $preString="" . ($arr[2]?
preg_match('/(два|три|четыре)$/u',$arr[2])?"{$arr[2]} миллиона":(preg_match('/(один)$/u',$arr[2])?"{$arr[2]} миллион":"{$arr[2]} миллионов")

Это невозможно читать. Слишком запутанно. Необходимо переписать.

В общем, задачу, увы, надо переделать. Я такое принять не могу, ты должен думать о тех, кто будет читать твой код, чтобы им было проще разобраться в нем.

Если ты не знаешь, как разбить код на части, могу предложить один вариант (другие варианты тоже допустимы):

- делаем функцию выбора формы слова (тысяча, тысяч) в зависимости от числа
- делаем функцию, которая преобразует число от 0 до 999 в строку
- делаем функцию, которая разбивает большое число на части и записывает его, вызывая функции выше

У каждой функции должна быть своя задача, и логичный, простой набор аргументов и возвращаемых значений.
Ответы: >>1270770
Аноним 2018/09/26 23:05:43  №1270770 9
Ответы: >>1270820 >>1271603
Аноним 2018/09/27 05:50:02  №1270820 10
>>1270770
Ебать ты англичанин.
Аноним 2018/09/28 18:06:43  №1271603 11
>>1270770
ОООпчик, ты меня проглядел?((( Смотрю, уже ниже спустился по ответам.
Ответы: >>1271942
Аноним 2018/09/29 14:30:18  №1271942 12
>>1271603
Дичайший быдлокод (в плане самого алгоритма), ещё и с английскими комментариями. Фу, бля.
Ответы: >>1272029
Аноним 2018/09/29 17:02:56  №1272029 13
>>1271942
Ну я и есть нубас. В прошлый раз Оп мне на ошибки указал, я их исправляю потихонечку. Сейчас еще укажет надеюсь, я снова переделаю. Так, глядишь, и научусь чему.
Ответы: >>1272066
Аноним 2018/09/29 17:55:13  №1272066 14
>>1272029
Всё правильно, так и надо. Только не создавай затруднения уже на начальном этапе. Смотри, как этот код примерно должен выглядеть: https://ideone.com/DyCEJU
Ответы: >>1272082 >>1272245 >>1272343
Аноним 2018/09/29 19:09:34  №1272082 15
>>1272066
Ох, мне аж чуть плохо не стало, подумал 1С.
Аноним 2018/09/30 07:02:10  №1272245 16
>>1272066
Надо на работе как-нибудь захерачить сразу в продакшен такое. Начальника с инфарктом скорая увезет, наверно...
Аноним 2018/09/30 10:55:39  №1272343 17
Ответы: >>1272361
Аноним 2018/09/30 11:18:06  №1272361 18
Ответы: >>1272475
Аноним 2018/09/30 16:18:33  №1272475 19
Capture.JPG (103, 1366x768)
768x1366
>>1272361
Че такой дерзкий? Выпускной сертификат от ОП-а показал быстро
Ответы: >>1272484
Аноним 2018/09/30 16:42:26  №1272484 20
>>1272475
> Выпускной сертификат от ОП-а показал быстро
Твоя опа-хреньворкщица сама сертификат не хочет показать? Или там только справка бакалавра?