Я просто положу это здесь, т.к. эта функция практически без изменений у меня качует из проекта в проект.
/**
* Склонение числительных (для русского языка)
*
* Принимает число и выбирает соответствующее склонение числительного. Всего 3 варианта, которые
* соответствуют числам 1, 2 и 5.
*
* @param int $number
* @param string $one
* @param string $two
* @param string $five
* @return string
*/
$plural = function($number, $one, $two, $five) {
if (($number - $number % 10) % 100 != 10) {
if ($number % 10 == 1) {
$result = $one;
} elseif ($number % 10 >= 2 && $number % 10 <= 4) {
$result = $two;
} else {
$result = $five;
}
} else {
$result = $five;
}
return $result;
};
Эта функция часто пригождается, когда нужно вывести правильное окончание у слов, связанных с количественным числительным. Например, нам нужно вывести кол-во слов. Мы пишем в шаблоне:
echo "Найдено " . $n . " слов";
Но $n может быть равно 1, тогда правильнее писать “слово“. А если слов, например, 23, то правильно писать “слова“. Данная функция реализует универсальный подход к решению данной задачи. Вы пишите:
echo "Найдено " . $n . " " . $plural($n, "слово", "слова", "слов");
Здесь функция $plural() принимает первым параметром число, по которому мы выбираем окончание, а тремя следующими параметрами принимает словоформы некоторого слова, которое нам нужно поставить с правильным окончанием, соответствующие числительным “один”, “два” и “пять” соответственно. Для всех остальных числительных (0, 7, 11, 22, 159) правильной будет одна из этих трёх форм и выбор нужной формы одинаков для всех существительных.