Функция возращения окончаний русских слов

Часто перед программистом стоит задача правильного оформления статических данных. Например, для вывода количества товаров в корзине, числа человек в онлайне, числа категорий и т.д. надо указывать слова с правильным окончанием — 1 человек, 2 человека, но 15 человек. Т.е. окончание слова зависит от сопутствующего числа.

Сведем проверку числа и выдачу окончания в следующую функцию.

<?php
function suffix($int, $arr){
	if($int == 0 || ($int > 4 && $int < 21)) return $arr[0];
	if($int > 20) $int = $int % 10;
	if($int == 1) return $arr[1];
	if($int == 2 || $int == 3 || $int == 4) return $arr[2];
	return $arr[0];
}
?>

Входными параметрами для функции являются число элементов $int и массив из трех слов, отвечающих условиям:

индекс массива условие числа элементов пример
0 $int = 0, 4 < $int < 21
$int = 25, $int = 35, …
$int = 26, $int = 36, …

$int = 29, $int = 39, …
человек, товаров, молекул
1 $int = 1, $int = 21, $int = 31, … человек, товар, молекула
2 $int = 2, $int = 22, $int = 32, …
$int = 3, $int = 23, $int = 33, …
$int = 4, $int = 24, $int = 34, …
человека, товара, молекулы

Для чисел, превышающих 99, используются условия для числа, полученного от остатка деления на 100 ($int % 100).

Примеры использования функции:

<?php
$nItems = rand(0, 10000);
printf('в корзине: %d товар%s< br />',
	$nItems,
	suffix($nItems, array('ов', '', 'а'));
printf('онлайн: %d %s< br />',
	$nItems,
	suffix($nItems, array('человек', 'человек', 'человека'));
?>

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

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