PHP

Склонение слов после числительных в PHP

В интернет магазинах, 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 - массив, в котором:

  • первый элемент задает текст для единичных значений,
  • второй для значений с 2-х до 4-х,
  • третий для всех остальных.

Например:

echo num_word(1, array('рубль', 'рубля', 'рублей')) . '<br>';
echo num_word(3, array('рубль', 'рубля', 'рублей')) . '<br>';
echo num_word(9, array('рубль', 'рубля', 'рублей')) . '<br>';

Результат:

1 рубль
3 рубля
9 рублей
В продолжении самые часто используемые единицы измерения:
1

Единицы измерения товаров

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('погонный метр', 'погонных метра', 'погонных метров'));
2

Экономические единицы

echo num_word($value, array('процент', 'процента', 'процентов'));
echo num_word($value, array('рубль', 'рубля', 'рублей'));
echo num_word($value, array('доллар', 'доллара', 'долларов'));
echo num_word($value, array('условная единица', 'условные единицы', 'условных единиц'));
3

Масса

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('миллиграмм', 'миллиграмма', 'миллиграммов'));
4

Длина

echo num_word($value, array('километр', 'километра', 'километров'));
echo num_word($value, array('метр', 'метра', 'метров'));
echo num_word($value, array('сантиметр', 'сантиметра', 'сантиметров'));
echo num_word($value, array('миллиметр', 'миллиметра', 'миллиметров'));
5

Объем

echo num_word($value, array('куб', 'куба', 'кубов'));
echo num_word($value, array('литр', 'литра', 'литров'));
echo num_word($value, array('миллилитр', 'миллилитра', 'миллилитров'));
6

Площадь

echo num_word($value, array('гектар', 'гектара', 'гектаров'));
echo num_word($value, array('акр', 'акра', 'акров'));
echo num_word($value, array('сотка', 'сотки', 'соток'));
echo num_word($value, array('квадратный метр', 'квадратных метра', 'квадратных метров'));
7

Дата и время

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('миллисекунда', 'миллисекунды', 'миллисекунд'));
8

Технические единицы

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('калория', 'калории', 'калорий'));
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('символ', 'символа', 'символов'));
24 августа 2018
В статье приведен пример формы и php скрипта для безопасной загрузки файлов на сервер, метод отправки файлов через...
В статье приведены основные примеры работы с расширением PHP PDO. Такие как подключение к БД, получение, изменение и...
В статье описана регистрация клиента, получения access token, примеры использования методов API Instagram на PHP.
Можно найти множество применений Яндекс Диска на своем сайте, например, хранение бекапов и отчетов, обновление прайсов,...
cURL PHP – это библиотека предназначенная для получения и передачи данных через такие протоколы, как HTTP, FTP, HTTPS....
Инструкция как получить бессрочный access token Facebook, запросы к Graph API, отправка сообщения на стену FB.