PHP

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

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

Например: 1 комментарий, 2 комментария, 10 комментариев, 101 комментарий, 151 комментарий, 511 комментариев, 777 комментариев, 1001 комментарий и т.д.
Функция склонения числительных

Пишем простую функцию string numberof(int numberof, string value, array suffix)
<?php
/**
 * Склонение числительныхфывфывфывф
 * @param int $numberof — склоняемое число
 * @param string $value — первая часть слова (можно назвать корнем)
 * @param array $suffix — массив возможных окончаний слов
 * @return string
 *
 */
function numberof($numberof, $value, $suffix)
{
    $keys = array(2, 0, 1, 1, 1, 2);
    $mod = $numberof % 100;
    $suffix_key = $mod > 4 && $mod < 20 ? 2 : $keys[min($mod%10, 5)];
    
    return $value . $suffix[$suffix_key];
}

// значения
$values = array(1, 2, 10, 101, 151, 511, 777, 1001);

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

Результат

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

1 комментарий
2 комментария
10 комментариев
101 комментарий
151 комментарий
511 комментариев
777 комментариев
1001 комментарий
Разъяснение по слову «комментарий»

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

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

Примечание

P.S.: Реализовать алгоритм можно разными способами, но, способ показанный выше, мне кажется, самый короткий. Можно обойтись двумя строками, только читаемость кода ухудшится.
Добавлено: 21 Августа 2013 06:36:08 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...