Выбираем окончания для существительных с количественным числительным

В русском языке существительные с количественным числительными могут быть в единственном, двойственном и множественном числе: один голос, два голоса, пять голосов (двойственное число — это почти исчезнувшая в русском языке грамматическая конструкция).

Я привык называть эти три формы следующим образом: «форма единицы», «форма двойки», «форма пятёрки».

Чтобы правильно просклонять существительное с количественным числительным, я наваял нечто подобное

function endingsForm($n, $form1, $form2, $form5) {
	$n = abs($n) % 100;
	$n1 = $n % 10;
	if ($n > 10 && $n < 20) return $form5;
	if ($n1 > 1 && $n1 < 5) return $form2;
	if ($n1 == 1) return $form1;
	return $form5;
}
 
// пример
echo 'Статья оценена в  '.$n.' '.endingsForm($n, 'голос', 'голоса', 'голосов');

Чтобы просклонять существительные на других языках, воспользуйтесь данным материалом

Для вставки кода используйте HTML-теги
<pre><code class="php">ваш код</code></pre>

Добавить комментарий

Такой e-mail уже зарегистрирован. Воспользуйтесь формой входа или введите другой.

Вы ввели некорректные логин или пароль

Извините, для комментирования необходимо войти.

4 комментария

по хронологии
по рейтингу сначала новые по хронологии

Более лаконичный вариант, переведенный из gettext на php:

[php]

<?php

function plural_form($n, $forms) {

return $n%10==1&&$n%100!=11?$forms[0]:($n%10>=2&&$n%10<=4&&$n%100=20)?$forms[1]:$forms[2]);

}

?>

[/php]

Автор
Кобзарёв Михаил

Так это абсолютно тоже самое, только записанное в одну строку )

слово "лаконичный" не говорит о том, что вариант должен быть другим

Автор
Кобзарёв Михаил

Согласен, но я за понятный код! Ваш код сложнее для понимания, хотя и короче:)