Функція для відмінювання іменників після чисельних, Блог 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 дні".
Цей момент теж має враховуватись у функції.
Всі ці умови відображені у функції smart_ending, забезпечуючи цим коректність її роботи.
Ось така проста і, сподіваюся, зручна функція вийшла.