Задача: Получить правильное окончание для слова товар (1 товар, 2 товара, 125 товаров) в зависимости от количества товаров. Таким образом можно склонять не только товары, функция принимает несколько аргументов, в том числе 3 формы итоговых слов.
Нашел тут https://misha.blog/php/declension-of-the-word.html
/* * $num число, от которого будет зависеть форма слова * $form_for_1 первая форма слова, например Товар * $form_for_2 вторая форма слова - Товара * $form_for_5 третья форма множественного числа слова - Товаров */ function pluralForm($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 . ' ' . pluralForm($max_product, 'товар', 'товара', 'товаров'); // в результате получится "5 товаров"
Эту функцию правильно назвать pluralForm()
И, на мой взгляд, формы лучше задать массивом.