«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Аноним 2018/07/31 20:26:40  №1238591 1
ОП, проверь, пожалуйста, задачи:
ПИШИ ВЕРНО:http://sandbox.onlinephpfunctions.com/code/3c8352717c46dd94d722880076fc352ce3aea067
YODA SPEAK(с сохранением знаков в конце):http://sandbox.onlinephpfunctions.com/code/0a534cec17d6efe3b16c9e23961603f67e07937e
СУММА ПРОПИСЬЮ:http://sandbox.onlinephpfunctions.com/code/1291210f3e694793e62a1be823935a1dc6df6d69
КАЛЬКУЛЯТОР(с делением и дробями): http://sandbox.onlinephpfunctions.com/code/c631161ae42f91df834bc0202ea3b840eb807a50
Ответы: >>1238602 >>1241783 >>1243952
Аноним 2018/07/31 20:32:39  №1238602 2
>>1238591
Сколько ушло времени на "Сумма прописью"?
Ответы: >>1238700
Аноним 2018/08/01 03:14:38  №1238700 3
Аноним 2018/08/06 05:04:10  №1241783 4
>>1238591
ОП, мало ли ты пропустил. Если будет время, посмотри одним глазом.
Ответы: >>1243952
Аноним 2018/08/10 03:56:39  №1243952 5
>>1241783
>>1238591

> ПИШИ ВЕРНО:http://sandbox.onlinephpfunctions.com/code/3c8352717c46dd94d722880076fc352ce3aea067
> function makeFirstLetterUppercase($textArray) {
Логичнее сделать функцию, которая делает что-то одно и обрабатывает одно предложение за раз. И вызывать ее в цикле, ведь цикл у тебя уже есть. А ты зачем-то добавил в нее еще склеивание массива в строку.

> [?]|[!]|[.]
Короче [?!.]

> (\\.+|\\?+|!
А почему после ! не стоит +? А лучше было бы написать как [?!.,;:]+ - чтобы проходили любые сочетания знаков.

Решено верно.

> YODA SPEAK(с сохранением знаков в конце):http://sandbox.onlinephpfunctions.com/code/0a534cec17d6efe3b16c9e23961603f67e07937e
> foreach ($sentencesArray as $sentence) {
Лучше ($sentences as $sentence). Не надо писать array.

> $firstWord = mb_strtolower($firstWord) . mb_substr($lastWord,mb_strlen($lastWord) - 1, 1) . ' ';
> $lastWord = mb_strtoupper(mb_substr($lastWord, 0, 1)) . mb_substr($lastWord, 1, mb_strlen($lastWord) - 2);
Здесь может быть стоило сделать отдельную функцию upcaseFirst, ради читаемости. Ну и отделение знака от предложения стоило сделать отдельно от изменения регистра.

> mb_substr($lastWord,mb_strlen($lastWord) - 1, 1)
Короче mb_substr($lastWord, -1), подробности в мануале.

То, что знаки сохраняются - это хорошо, но конечно код мог бы быть чуть читаемее.

> СУММА ПРОПИСЬЮ:http://sandbox.onlinephpfunctions.com/code/1291210f3e694793e62a1be823935a1dc6df6d69

Неправильно выводит:

> На вашем счету: двадцать один миллионов двадцать две тысяч тридцать три (21022033) рублей.

> $words = array(
> 'рубль',
> 'рубля',
> 'рублей',

лучше сделать 2-мерный массив вида

[
[рубль, рубля, ..],
[тысяча, тысяч, ...],
...
]

Тогда не понадобятся магические цифры вроде $i += 3 или ($i == 6).

Еще вариант в таких случаях - сделать вместо цикла 3 вызова функции:

$part1 = spellNumber($number1, 'рубля', 'рублей', ...);
$part2 = spellNumber($number2, 'тысяча', 'тысячи', ...);
...

> $text .= $spelling[$digit] . ' ';
Часто проще складывать слова в массив, чтобы не мучаться с лишними пробелами.

> if (($number > 9) && ($number % 100 > 9)) {
Первое условие не лишнее?



КАЛЬКУЛЯТОР(с делением и дробями): http://sandbox.onlinephpfunctions.com/code/c631161ae42f91df834bc0202ea3b840eb807a50

А, я-то думал, тут дроби вроде 1/2 + 3/4 = 5/4.

> $number = floatval(strval($number) . $char);
> $number = strval($number) . $char;
Это плохо, что у тебя переменная постоянно меняет тип, так как трудно понять, где она имеет какой тип и как с ней работать. Лучше было копить символы как строку, а только перед выполнением операции преобразовать в число.

Работает верно.
Ответы: >>1243965
Аноним 2018/08/10 04:43:17  №1243965 6
>>1243948
>>1243952
Спасибо, сам такое без опыта не замечаю, думаю, придёт все потом.
Решу после антикризисных мер ещё твою про гостиницу из архива тредов, потому что схему ооп в голове пока что сложновато строить.