Exogens
О компании Контакты Клиенты Новости Форум

В корзине 7 товаров или Учимся склонять правильно

2009.10.03
Программистам иногда приходится писать код, который будет выводить пользователю что-то вроде «В корзине 7 товаров». Самый простой способ – это написать «В корзине 7 товар[а,ов]», что не отличается ни красотой, ни удобством прочтения. Взгляд самовольно задерживается на таких скобочках. Есть способ лучше – автоматически склонять слова, указав зависимость окончаний слов от цифр. Тут все очень просто на самом деле.

Существительные

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

Условия «Товар» «Позиция» «Сайт» «Птичка» Примеры чисел
..0, ..5, ..6, ..7, ..8, ..9; ..11, ..12, ..13, ..14 товаров позиций сайтов птичек 7, 105, 111, 1007, 2012
..1 (кроме ..11) товар позиция сайт птичка 1, 51, 101, 761, 1001
..2, ..3, ..4 (кроме ..12, ..13, ..14) товара позиции сайта птички 2, 32, 64, 404, 1234

Вот то же самое, но сразу для PHP. Пусть у нас $c – это изменяющееся число, а нам надо написать фразу как в заголовке поста.

echo 'В корзине '.$c;

$a = substr($c, strlen($c)-1, 1); # Это последний символ
$b = substr($c, strlen($c)-2, 2); # Это два последних символа

if ($a==0 or ($a>=5 and $a<=9) or ($b>=11 and $b<=14)) echo ' товаров.';
if ($a==1 and $b!=11) echo ' товар.';
if ($a>=2 and $a<=4 and $b!=12 and $b!=13 and $b!=14) echo ' товара.';

Глаголы

С глаголами все еще проще, тут вообще только два варианта, хотя постоянно кажется, что что-то упустил.

Условия «Добавлять его» «Добавлять ее» Примеры чисел
..1 (кроме ..11) добавлен добавлена 1, 101
все остальное и ..11 добавлено добавлено 11, 105

Теперь полный кусок PHP-кода для вывода фразы типа «В корзину добавлено 7 товаров».:

echo 'В корзину ';

$a = substr($c, strlen($c)-1, 1); # Это последний символ
$b = substr($c, strlen($c)-2, 2); # Это два последних символа

if ($a==1 and $b!=11) echo ' добавлен ';
if ($a!=1 or $b==11) echo ' добавлено ';

echo $c;

if ($a==0 or ($a>=5 and $a<=9) or ($b>=11 and $b<=14)) echo ' товаров.';
if ($a==1 and $b!=11) echo ' товар.';
if ($a>=2 and $a<=4 and $b!=12 and $b!=13 and $b!=14) echo ' товара.';

Вот пример отработки такого PHP-кода (исходник):

Страницу можно обновить, тогда поменяются числа и, соответственно, поменяются и окончанию у слов.


Следующий пост: Оптимизация фотогалереи (#52, 2009.10.08)
Предыдущий пост: Обклейка Vitz свершилась! (#50, 2009.09.15)

Пост #51. Постоянная ссылка на пост: https://exogens.ru/blog/post/v-korzine-7-tovarov-ili-uchimsya-sklonyat-pravilno/

Расскажите о нас!

Мы поддержим

Техподдержка | Контакты | Форум
О компании | Отзывы | Блог
Карта сайта | На главную

Мы предлагаем создание сайтов в Новосибирске под ключ на нашей CMS Ruen, их обслуживание и сопутствующие рекламные услуги.

Сайт работает на CMS RUEN

www.webmoney.ru

Блог

26Июнь
2017
Случайный эксперимент с аудиторией сайтов
31Март
2017
Показываем объявления Яндекс Директ
15Июнь
2016
Правильный адрес сайта
31Май
2016
Обновление нашего бесплатного инструмента
12Май
2016
Эксперимент по статистике сайта
18Март
2016
Создание и разработка сайтов
1Март
2016
Вход рубль, выход – два
18Февраль
2016
Мобильная версия по Яндексу vs. Pluso.ru
© Exogens, 2003-2024ИП Богданович К.П.   ИНН 540445113470   ОГРИП 305540427600039   WM аттестован   Политика конфиденциальности