Функція для відмінювання іменників після чисельних, Блог Coding Hamster

Хочу поділитися однією функцією мовою PHP, якою користуюся для виведення коректного закінчення іменників після чисельного. Наприклад: "3 місця", "17 користувачів" і т.д.

Так ось сам код:

Функція приймає вхід від 2 до 3 параметрів. Перший параметр ($number) - це число, власне, число. Другий параметр ($ forms) це масив іменників. Третій параметр ( $base ) — основа слова, що незмінюється, його можна вказувати для скорочення запису, якщо в цьому є необхідність.

Наприклад, результат роботи функції в обох випадках буде ідентичним:

Також іноді може бути, що при відмінюванні іменник повністю змінює свою форму. У таких випадках можливий лише один варіант виклику функції без параметра $base .

Як це працює?

Існує три варіанти відмінювання:

    Якщо залишок від ділення чисельного на 10 дорівнює 1.

Наприклад, це числа: 1, 21, 31 і т.д. Форма іменника для них буде однакова: "1 день", "21 квиток".

Але виняток становить число 11 і закінчуються на 11 числа 111, 211 і т.д. Залишок від розподілу таких чисел на 10 теж дорівнює 1, але використовувати ту ж форму іменника не можна: «11 день».

Тому у функції цей момент має враховуватися.

Якщо залишок від ділення чисельного на 10 дорівнює 2, 3 або 4.

Наприклад, це числа: 2, 23, 34 і т.д. Форма іменника для них буде однакова: «22 дні», «4 квитки».

Але знову не обійшлося без винятків. Числа 12, 13, 14 і цифри, що закінчуються на ці цифри, 114, 212 і т.д. Як і в попередньому випадку, залишок від поділу таких чисел на 10 задовольняє умові, але форма іменника буденевірна: "14 дні".

Цей момент теж має враховуватись у функції.

  • Всі інші залишки від ділення чисельного на 10, а також винятки з попередніх двох варіантів використовують третю форму іменника. Приклади: "12 днів", "18 квитків", "111 годин".
  • Всі ці умови відображені у функції smart_ending, забезпечуючи цим коректність її роботи.

    Ось така проста і, сподіваюся, зручна функція вийшла.