Поделитесь алгоритмом склонения существительных после числительных («1 жалоба», «2 жалобы», «5 жалоб») на PHP.
Склонение существительных после числительных — одна из классических задач при разработке на PHP для русскоязычных проектов. Ниже приведён универсальный алгоритм и готовая функция.
**Правило склонения в русском языке:**
— Если остаток от деления на 100 находится в диапазоне 11–19 — используется форма родительного падежа множественного числа (5 жалоб).
— Если остаток от деления на 10 равен 1 — именительный падеж единственного числа (1 жалоба).
— Если остаток от деления на 10 равен 2, 3 или 4 — родительный падеж единственного числа (2 жалобы).
— Во всех остальных случаях — родительный падеж множественного числа (5 жалоб).
**Готовая функция на PHP:**
php
function pluralize(int $number, string $form1, string $form2, string $form5): string {
$abs = abs($number);
$mod100 = $abs % 100;
$mod10 = $abs % 10;
if ($mod100 >= 11 && $mod100 = 2 && $mod10 <= 4) {
return $form2;
}
return $form5;
}
**Пример использования:**
php
$words = ['жалоба', 'жалобы', 'жалоб'];
foreach ([1, 2, 5, 11, 21, 22, 25, 111] as $n) {
echo $n . ' ' . pluralize($n, …$words) . PHP_EOL;
}
**Вывод:**
1 жалоба
2 жалобы
5 жалоб
11 жалоб
21 жалоба
22 жалобы
25 жалоб
111 жалоб
**Параметры функции:**
— `$number` — числительное.
— `$form1` — форма для 1 (жалоба, день, файл).
— `$form2` — форма для 2–4 (жалобы, дня, файла).
— `$form5` — форма для 5+ (жалоб, дней, файлов).
Функция корректно обрабатывает числа 11–19 (исключения), отрицательные значения и большие числа. Её можно расширить, добавив возврат строки вместе с числом: `return $number . ' ' . $form;`.
Данный алгоритм применим для любых существительных русского языка и легко адаптируется под украинский язык с небольшими правками.
