Вы можете авторизоваться через ВКонтакте, Фейсбук и оставить комментарий


Склонение числительных на PHP

Для красоты вывода информации, иногда приходится склонять числительные.

Например: 1 комментарий, 2 комментария, 10 комментариев, 101 комментарий, 151 комментарий, 511 комментариев, 777 комментариев, 1001 комментарий и т.д.

Функция склонения числительных

Пишем простую функцию string numberof(int numberof, string value, array suffix)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
/**
 * Склонение числительныхфывфывфывф
 * @param int $numberof — склоняемое число
 * @param string $value — первая часть слова (можно назвать корнем)
 * @param array $suffix — массив возможных окончаний слов
 * @return string
 *
 */
function numberof($numberof$value$suffix)
{
    
// не будем склонять отрицательные числа
    
$numberof abs($numberof);
    
$keys = array(201112);
    
$mod $numberof 100;
    
$suffix_key $mod && $mod 20 $keys[min($mod%105)];
    
    return 
$value $suffix[$suffix_key];
}

// значения
$values = array(12101011515117771001);

// перебираем массив
foreach ($values as $number)
{
    echo 
$number.' ';
    
    
// получаем нужное склонение
    
echo numberof($number'комментари', array('й''я''ев'));
    echo 
'<br>';
}
?>

Результат

На экране вы увидите:

1 комментарий
2 комментария
10 комментариев
101 комментарий
151 комментарий
511 комментариев
777 комментариев
1001 комментарий

Разъяснение по слову «комментарий»

Слово комментарий может принимать всего 3 значения: комментари(й), комментари(я), комментари(ев).

Алгоритм

  1. Число заканчивающееся на 1 (1, 21, 31, 101, 1001, 1161 и т.д.), исключение 11, получает первое окончание: комментари(й)
  2. Далее все числа в диапазоне от 2 до 4 (2-4, 22-24, 32-34, 102-104, 1122-1124), исключение 12-14, получает второе окончание: комментари(я)
  3. Все остальные числа получают значение комментари(ев)

Примечание

P.S.: Реализовать алгоритм можно разными способами, но, способ показанный выше, мне кажется, самый короткий. Можно обойтись двумя строками, только читаемость кода ухудшится.

Опубликовано: 28 декабря 2010  ·  Автор: Артём Фёдоров  ·  7394 просмотра

Категория

ГлавнаяПрограммированиеPHPСклонение числительных на PHP

Чтобы оставить комментарий нужно авторизоваться на сайте
или войти через ВКонтакте или Фейсбук

Войти через ФейсбукВойти через Твиттер

Комментарии

Спасибо. Поправил!
Артём Фёдоров · 4 года назад
Хорошая, ёмкая реализация. Но падает при отрицательных значениях.
$numberof = abs($numberof);
Антон Терехов · 4 года назад
PHP, Программирование

© 2010-2017 expange.ru
При полном или частичном копировании статей сайта, ссылка на источник обязательна.

Хотите узнать больше информации, пишите на: artem@expange.ru

Полезное онлайн  ·  Новости  ·  Изображения  ·  Статьи по датам

О проекте  ·  Правила пользования  ·  Представительства

Благодарности и пожелания