В интернет магазинах, CRM и других сервисах для «правильности» есть необходимость склонять существительных после чисел или как это еще называют – плюрализация, например: 1 товар, 2 товара, 5 товаров.
Реализовать такой вывод можно с помощью функции:
/**
* Склонение существительных после числительных.
*
* @param string $value Значение
* @param array $words Массив вариантов, например: array('товар', 'товара', 'товаров')
* @param bool $show Включает значение $value в результирующею строку
* @return string
*/
function num_word($value, $words, $show = true)
{
$num = $value % 100;
if ($num > 19) {
$num = $num % 10;
}
$out = ($show) ? $value . ' ' : '';
switch ($num) {
case 1: $out .= $words[0]; break;
case 2:
case 3:
case 4: $out .= $words[1]; break;
default: $out .= $words[2]; break;
}
return $out;
}
Параметр $words
– массив, в котором:
Например:
echo num_word(1, array('рубль', 'рубля', 'рублей')) . '<br>';
echo num_word(3, array('рубль', 'рубля', 'рублей')) . '<br>';
echo num_word(9, array('рубль', 'рубля', 'рублей')) . '<br>';
1 рубль
3 рубля
9 рублей
В продолжении самые часто используемые единицы измерения:
echo num_word($value, array('товар', 'товара', 'товаров');
echo num_word($value, array('штука', 'штуки', 'штук');
echo num_word($value, array('упаковка', 'упаковки', 'упаковок');
echo num_word($value, array('коробка', 'коробки', 'коробок');
echo num_word($value, array('пачка', 'пачки', 'пачек');
echo num_word($value, array('ящик', 'ящика', 'ящиков');
echo num_word($value, array('комплект', 'комплекта', 'комплектов');
echo num_word($value, array('экземпляр', 'экземпляра', 'экземпляров');
echo num_word($value, array('рулон', 'рулона', 'рулонов');
echo num_word($value, array('лист', 'листа', 'листов');
echo num_word($value, array('погонный метр', 'погонных метра', 'погонных метров'));
echo num_word($value, array('процент', 'процента', 'процентов'));
echo num_word($value, array('рубль', 'рубля', 'рублей'));
echo num_word($value, array('доллар', 'доллара', 'долларов'));
echo num_word($value, array('условная единица', 'условные единицы', 'условных единиц'));
echo num_word($value, array('тонна', 'тонны', 'тонн'));
echo num_word($value, array('центнер', 'центнера', 'центнеров'));
echo num_word($value, array('килограмм', 'килограмма', 'килограммов'));
echo num_word($value, array('грамм', 'грамма', 'граммов'));
echo num_word($value, array('миллиграмм', 'миллиграмма', 'миллиграммов'));
echo num_word($value, array('километр', 'километра', 'километров'));
echo num_word($value, array('метр', 'метра', 'метров'));
echo num_word($value, array('сантиметр', 'сантиметра', 'сантиметров'));
echo num_word($value, array('миллиметр', 'миллиметра', 'миллиметров'));
echo num_word($value, array('куб', 'куба', 'кубов'));
echo num_word($value, array('литр', 'литра', 'литров'));
echo num_word($value, array('миллилитр', 'миллилитра', 'миллилитров'));
echo num_word($value, array('гектар', 'гектара', 'гектаров'));
echo num_word($value, array('акр', 'акра', 'акров'));
echo num_word($value, array('сотка', 'сотки', 'соток'));
echo num_word($value, array('квадратный метр', 'квадратных метра', 'квадратных метров'));
echo num_word($value, array('год', 'года', 'лет'));
echo num_word($value, array('месяц', 'месяца', 'месяцев'));
echo num_word($value, array('день', 'дня', 'дней'));
echo num_word($value, array('сутки', 'суток', 'суток'));
echo num_word($value, array('час', 'часа', 'часов'));
echo num_word($value, array('минута', 'минуты', 'минут'));
echo num_word($value, array('секунда', 'секунды', 'секунд'));
echo num_word($value, array('микросекунда', 'микросекунды', 'микросекунд'));
echo num_word($value, array('миллисекунда', 'миллисекунды', 'миллисекунд'));
echo num_word($value, array('оборот в минуту', 'оборотов в минуту', 'оборотов в минуту'));
echo num_word($value, array('километр в час', 'километра в час', 'километров в час'));
echo num_word($value, array('лошадиная сила', 'лошадиные силы', 'лошадиных сил'));
echo num_word($value, array('градус', 'градуса', 'градусов'));
echo num_word($value, array('калория', 'калории', 'калорий'));
echo num_word($value, array('параграф', 'параграфа', 'параграфов'));
echo num_word($value, array('предложение', 'предложения', 'предложений'));
echo num_word($value, array('слово', 'слова', 'слов'));
echo num_word($value, array('знак', 'знака', 'знаков'));
echo num_word($value, array('символ', 'символа', 'символов'));