Найти в Дзене

Получаем окончание количества “товаров” в 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' && $numEnd
Оглавление

Иногда приходится выводить на странице сайта количество чего-либо с пояснением, например, 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, 'лента'); // на экран будет выведена фраза "лент"
?>