«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Аноним 2021/01/08 14:20:21  №1904705 1
Привет, ОП. С большим трудом решил задачку про числа прописью, проверь и подскажи если можно сократить, спасибо заранее.

https://ideone.com/YFUhyM

Ответы: >>1913224
Аноним 2021/01/09 12:57:47  №1905545 2
ОП, аноны, можете чекнуть решение задачи «Grammar Nazi» из учебника ОПа

https://ideone.com/QGNJdV
Ответы: >>1905678 >>1913224
Аноним 2021/01/17 17:04:12  №1913224 3
>>1905545

> mb_substr($string, $stringPos - 30, 30);

Тут есть риск, что если $stringPos < 30, то получится отрицательное число и будет взят кусок не оттуда (а с конца строки). Это видно в выводе программы:

> Допущена ошибка: .... Пикрандом а так. [Жывотные] Хочу принести тебе прохладную... (жи/ши пиши через И)

> [а-яёА-ЯЁ0-9]+\s+а\s+

Здесь после "а" лучше поставить \b, иначе не сработает, если после "а" идет запятая.

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

>>1904705

Есть ошибка: число 71000 печатается как "семьдесят один тысяча рублей".

> $numberLast2Digits == 11 || $numberLast2Digits == 12 || $numberLast2Digits == 13 || $numberLast2Digits == 14 || $numberLast2Digits == 15 || $numberLast2Digits == 16 || $numberLast2Digits == 17 || $numberLast2Digits == 18 || $numberLast2Digits == 19

Это можно было бы заменить на $last2Digits >= 11 && $last2Digits <= 19.

> (floor(($number - (floor($number / 1000) 1000)) / 100)) 100;

Сотни можно посчитать как floor($number / 100), непонятно зачем так сложно.

> \t\t$str = "ноль";
Можно было сразу сюда дописать "рублей", чтобы не делать вызов функции inclineWord().

> if($thousandsDigits == 1 || $thousandsDigits == 2){
> \t$thousandsWords = smallNumberToText($thousandsDigits, 1);

Вообще, по задумке эту проверку должна была делать функция smallNumberToText. То есть мы передаем ей число и род (мужской, женский), а она сама определяет, какую форму числа брать. В твоем решении 71000 выводится неправильно.
Ответы: >>1918211
Аноним 2021/01/22 15:01:07  №1918211 4
>>1913224
>Есть ошибка: число 71000 печатается как "семьдесят один тысяча рублей".

Вроде что-то накарябал, проверь если не сложно, спасибо что заметил ошибку.
https://ideone.com/eAXWdN