Поделитесь алгоритмом склонения существительных после числительных («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;`.

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


Задайте вопрос нейросети

Не нашли ответ? Спросите ИИ — он подготовит развёрнутую статью.