Склонение окончаний слов в зависимости от количества на PHP

от 2018 - 08 - 31

Задача: Получить правильное окончание для слова товар (1 товар, 2 товара, 125 товаров) в зависимости от количества товаров. Таким образом можно склонять не только товары, функция принимает несколько аргументов, в том числе 3 формы итоговых слов.

Нашел тут https://misha.blog/php/declension-of-the-word.html

/*
* $num число, от которого будет зависеть форма слова
* $form_for_1 первая форма слова, например Товар
* $form_for_2 вторая форма слова - Товара
* $form_for_5 третья форма множественного числа слова - Товаров
*/

function true_wordform($num, $form_for_1, $form_for_2, $form_for_5) {
	
	$num = abs($num) % 100; // берем число по модулю и сбрасываем сотни (делим на 100, а остаток присваиваем переменной $num)
	
	$num_x = $num % 10; // сбрасываем десятки и записываем в новую переменную
	
	if ($num > 10 && $num < 20) return $form_for_5; // если число принадлежит отрезку [11;19]

	if ($num_x > 1 && $num_x < 5) return $form_for_2; // иначе если число оканчивается на 2,3,4
	
	if ($num_x == 1) return $form_for_1; // иначе если оканчивается на 1
	
	return $form_for_5;
}
	
$max_product = 5; // число, эта переменная может задаваться через какую-то другую функцию или доставаться из базы - неважно
echo $max_product . ' ' . true_wordform($max_product, 'товар', 'товара', 'товаров'); // в результате получится "5 товаров"