Простое склонение числительных на PHP/JavaScript
Рад поделиться с читателями нашего сайта двумя полезными функциями (по одной на каждый из описанных в заголовке языков программирования). Все дело в том, что на многих сайтах я вижу картину, похожую на эту: 5 комментария, в вашей корзине 31 яблок и т.д. Все это с точки зрения орфографии является неверным представлением информации, и если вы все же ведете в какой-то степени серьезный проект – этому нужно уделить внимание.
Для этого я покажу вам две, по сути, идентичные функции для PHP и JavaScript, которые позволят правильно склонять слова в зависимости от сопутствующих им числовых значений.
Простое склонение числительных на PHP
Чтобы не быть многословным, функция для PHP выглядит так:
function declination($number, $titles) {
$cases = array(2, 0, 1, 1, 1, 2);
return $number." ".$titles[($number%100>4 && $number%100<20) ? 2 : $cases[min($number%10, 5)]];
}
Ее рекомендуется вставить в верхнюю часть вашего файла PHP. А это ее пример использования:
$title = declination(100, array("человек", "человека", "человек"));
echo $title;
В коде выше 100 – это наше число (можно указать вручную или заменить переменной), а array("человек", "человека", "человек") – массив со склоняемыми словами.
Теперь поговорим о логике составления этих массивов. Нам необходимо подставить слова по такому принципу: на первом месте – для единицы, на втором – для пары, на третьем – для пяти.
Простое склонение числительный на JavaScript
В JavaScript функция будет похожей:
function declination(number, titles) {
cases = [2, 0, 1, 1, 1, 2];
return number+" "+titles[(number%100>4 && number%100<20) ? 2 : cases[(number%10<5) ? number%10 : 5]];
}
Функцию надо вставлять выше ее вызова. Пример ее использования:
var title = declination(100, ["человек", "человека", "человек"]);
alert(title);
100 здесь все то же наше число, а ["человек", "человека", "человек"] – массив со склонениями, который вы составляете по тому же самому принципу, что и в примере с PHP.