<?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']), ' к новости &laquo;', $post->post_title, '&raquo;:';

Удачного кодинга!

Запись опубликована в рубрике Web-мастеринг с метками , . Короткая ссылка для добавления в закладки: <?php Раз ромашка, две ромашки, пять ромашек.

4 Responses

  1. Дамир говорит:

    Хах, подобно этому в универе скрипт про кошек писали на С++:) Чтоб окончания правильно выводились:)

    И на юкозе можно создать хорошие сайты

    • Pavluha.Net говорит:

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

  2. zusicks438 говорит:

    Софит мне в жопу, это же то что нужно! :) Буду использовать в дальнейшем, а то надоело каждый раз гуглить на эту тему.

    • Pavluha.Net говорит:

      Рад, что не мне одному пригодилось. Забыл только упомянуть, что скрипт приводит число к целому, потому будет «1 целая 2 десятых ромашка». Если есть необходимость работать с дробными числами, думаю, достаточно будет в самом начале функции добавить условие: if (abs($n) != abs((int)$n)) return $t[1];

      Не проверял, но должно работать

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Иногда ваш комментарий может не отобразиться сразу после публикации - будто пропал. Не волнуйтесь, он не пропадёт и появится потом, после моего одобрения.