<?php Раз ромашка, две ромашки, пять ромашек
Счастливая возможность написать о программировании на PHP. Ковыряюсь тут с одной темой оформления WP, и решил, доколе мне мириться со всякими «2 комментариев» или «2 новостей»? Ведь это у буржуев либо один, либо много — третьего не дано, а у русских всегда есть место третьему варианту.
Чтобы раз и навсегда решить задачу «подсчёта ромашек», написал для себя PHP-функцию правильных числовых окончаний. Вы её можете использовать и в своих проектах всего за 0,5% прибыли от проектов, либо редактировать её для своих нужд, купив у меня право на это за 1 000 у.е.
Да, ладно. Берите даром, пока я добрый.
### ## Русские окончания: 1 штука, 2 штуки, 5 штук # function pavluha_ru_num ($n, $t = array('ромашка', 'ромашки', 'ромашек')) { $m10 = abs((int)$n % 10); $m100 = abs((int)$n % 100); if ($m10==1 and $m100!=11) return $t[0]; if ($m10>1 and $m10<5 and ($n100<5 or $n100>21)) return $t[1]; return $t[2]; }
Если юзаете WordPress, можете вставить этот код, например, в function.php. И я, как всегда, напоминаю о необходимости редактировать файлы WP в редакторе Notepad++ в кодировке UTF-8 без BOM, и никак иначе.
Абстрактный пример использования функции:
$n = 21; $t = array('товар', 'товара', 'товаров'); echo pavluha_ru_num ($n, $t);
Резульатом работы этого кода будет строка: «21 товар».
Конкретный пример использования функции:
Из рабочего файла темы WP comments.php я взял 2 строки кода, которые относятся к той части, где перед блоком комментария должна выводиться надпись: «N комментариев к такой-то новости». Как вы поняли N — число комментариев, а «такая-то новость» — это заголовок новости. Код ниже.
$txt['ru_num'] = array('комментарий','комментария','комментариев'); # 1, 2, 5 echo $nc, ' ', pavluha_ru_num($nc,$txt['ru_num']), ' к новости «', $post->post_title, '»:';
Удачного кодинга!
https://www.youtube.com/watch?v=Fo8IPQ_T9dU
4 ответа к “<?php Раз ромашка, две ромашки, пять ромашек”
Хах, подобно этому в универе скрипт про кошек писали на С++:) Чтоб окончания правильно выводились:)
И на юкозе можно создать хорошие сайты
Дамир, а вы шутник, однако. Впрочем, я тут специально оставил вашу ссылку, чтобы вы поняли: по крайней мере с кириллическим доменом спамить мой блог бесполезно — глючный плагин сокрытия внешних ссылок портит дело, и перейти по ссылке сможет только самый настойчивый юзер (молчу даже про ботов).
Софит мне в жопу, это же то что нужно! Буду использовать в дальнейшем, а то надоело каждый раз гуглить на эту тему.
Рад, что не мне одному пригодилось. Забыл только упомянуть, что скрипт приводит число к целому, потому будет «1 целая 2 десятых ромашка». Если есть необходимость работать с дробными числами, думаю, достаточно будет в самом начале функции добавить условие:
if (abs($n) != abs((int)$n)) return $t[1];
Не проверял, но должно работать