Last active
March 25, 2022 13:57
-
-
Save sagittaracc/b867e9143c4a0e59a2c7693fdf8377b6 to your computer and use it in GitHub Desktop.
Склонение существительного в соответствии с числительным (множественный падеж)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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