Skip to content

Instantly share code, notes, and snippets.

@sagittaracc
Last active March 25, 2022 13:57
Show Gist options
  • Save sagittaracc/b867e9143c4a0e59a2c7693fdf8377b6 to your computer and use it in GitHub Desktop.
Save sagittaracc/b867e9143c4a0e59a2c7693fdf8377b6 to your computer and use it in GitHub Desktop.
Склонение существительного в соответствии с числительным (множественный падеж)
<?php
/**
* Возвращает существительное в соответствующей форме по числительному
* @param int $number
* @param array $cases формы существительного
* При склонении по числительному существительное имеет три формы
*
* Пример: слово "программа"
*
* Первая форма - программа
* Вторая форма - программы
* Третья форма - программ
*
* Одна программа, две программы, три программы, четыре программы, пять программ, шесть программ и т.д.
*/
function noun_case($number, $cases)
{
/**
* Обработка исключений в русском языке
* При счёте от 11 до 14, склонение не поддается никаким правилам =)
* В этих случаях - третья форма существительного
*/
if ($number % 100 >= 11 && $number % 100 <= 14) {
return $cases[3];
}
/**
* Остальное по правилам
* Число заканчивается на единицу - это первая форма
* Число заканчивается на двойку, тройку или четверку - это вторая форма
* Остальное - третья форма
*/
return $number % 10 === 1
? $cases[1]
: ($number % 10 >= 2 && $number % 10 <= 4
? $cases[2]
: $cases[3]
);
}
echo noun_case(3, [1 => 'программа', 2 => 'программы', 3 => 'программ']);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment