Получаем окончание количества “товаров” в PHP

Иногда приходится выводить на странице сайта количество чего-либо с пояснением, например, 12 апельсинов. При этом количество может меняться и требуется подствалять правилььное окончание слова рядом с числом. Как раз для этих случаев я использую вспомогательную функцию, которую добавляю в свои проекты.

<?
function getCountEndString($num=1, $string='', $type='M') {
    $numEnd = intval(substr($num, -1));
    $numEnd2 = intval(substr($num, -2));
    $strEnd = '';
    $variable = [
        'M' => [
            0 => "",
            1 => "а",
            2 => "ов",
        ],
        'F' => [
            0 => "а",
            1 => "ы",
            2 => "",
        ],
    ];
    
    if($type == "F"){
        $string = mb_substr($string, 0, -1);
    }
        
    if($numEnd > 1 && $numEnd < 5 && ($numEnd2 < 10 || $numEnd2 > 20)){
        // 2-4, 22-24, 122-124 ...
        // 'товар'.'а'

        $strEnd = $variable[$type][1];
    }
    elseif($num == 1 || ($num > 20 && $numEnd == '1' && $numEnd2 != 11)){
        // 1, 21, 101, 121 ...
        // 'товар'.''

        $strEnd = $variable[$type][0];
    }
    else{
        // 0, 5-20, 25-30, ..., 100, 105-120 ...
        // 'товар'.'ов'

        $strEnd = $variable[$type][2];
    }
    
    return $string.$strEnd;
}
?>

В коде функции проверяем число на его окончание и исходя из этого возвращаем строку с подстановкой нужного окончания, или только одно окончание в том случае, если во втором параметре функции мы ничего не передали.

Возвращаемое значение

Функция возвращает строку с правильным окончанием.

Параметры функции

$num – количество, для которого вычисляем окончание

$string – строка, к которой будем добавлять окончания (по умолчанию если не задано значение этого параметра, то функция венет только окончание)

$type – род существительного (M – мужской, F – женский), данный параметр позволяет изменить формат окончаний для существительных женского рода. По умолчанию функция отрабатывает для мужского рода.

Пример использования функции подставноки окончания к числительному

<?
echo getCountEndString(12, 'апельсин'); // на экран будет выведена фраза "апельсинов"

echo getCountEndString(21, 'апельсин'); // на экран будет выведена фраза "апельсин"

echo getCountEndString(4, 'апельсин'); // на экран будет выведена фраза "апельсина"

echo getCountEndString(109, 'апельсин'); // на экран будет выведена фраза "апельсинов"


echo getCountEndString(12, 'лента'); // на экран будет выведена фраза "лент"

echo getCountEndString(21, 'лента'); // на экран будет выведена фраза "лента"

echo getCountEndString(4, 'лента'); // на экран будет выведена фраза "ленты"

echo getCountEndString(109, 'лента'); // на экран будет выведена фраза "лент"
?>

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Посты по теме

Полезные сервисы WEB разработчика

В этом посте я поделюсь отобранными сервисами, которыми приходится часто пользоваться в своей повседневной работе. MailTester Полезный сервис, который помогает проверить настройки записей DKIM, DMARK и SPF https://www.mail-tester.com/ Bertal Сервис помогает проверить ответы сервера и подсвечивает цепочки редиректов https://bertal.ru/ PHP Live Regex Удобный сервис для отладки регулярных выражений PHP, позволяет значительно сократить время на написании […]

Шпаргалка Linux CLI частые команды

Часто используемые команды Linux для облегчения работы web-разработчика. Управление web сервером из командной строки linux.

Часто используемые FRONTend библиотеки и фреймворки

Почти в каждом проекте приходится работать с адаптивом, анимацией и другими привычными в наше время эффектами. Писать каждый раз на голом JS и CSS это большие перезатраты времени и энергии. На помощь нам уже созданы множество фреймворков и библиотек, которые облегчают рутинную работу программистов. 1. jQuery Используется почти везде. Да, есть свои недостатки, но простота […]

Шпаргалка WEB разработчика

Правильное подключение стилей и скриптов В подключении скриптов и стилей добавляем два лайфхака облегчающих жизнь программита: WordPress PHP Подчключаем файл стилей Подключаем файл скриптов Ссылки на чат в мессенджере Whatsapp Telegram VK Плавающее сообщение под шапкой Оптимизация загрузки стилей под Google Pagespeed Этот финт ушами помогает сделать фоновую загрузку стилей, чтобы инструмент гугла не ругался […]