QAlt / Полезные статьи, скрипты / 29 июля 2013г, понедельник

Человеческие окончания числительных

Как часто вы видите в блогах записи, типа: "2 комментариев", "51 комментариев"?.. А ведь сделать человеческие окончания числительных очень и очень просто, и вариантов реализаций великое множество.

Я же для себя пришёл к следующему элегантному решению:

function plural($number, 
                $titles=array('комментарий','комментария','комментариев'), 
                $print_number=FALSE
)
{
    $cases = array (2, 0, 1, 1, 1, 2);
    $res = "";
    if ($print_number) $res .= $number." ";
    $res .= $titles[ 
        ($number%100 >4 && $number%100< 20) 
        ? 2 
        : $cases[min($number%10, 5)] 
    ];
    return $res;
}

Использование:

$num = 0; 
echo $num." ".plural($num); 
// 0 комментариев

$num = 1; 
echo $num." запис".plural($num, array("ь","и","ей")); 
// 1 запись

$num = 2; 
echo plural($num, array("слово","слова","слов"), TRUE); 
// 2 слова

$num = 5; 
echo plural($num, array("символ","символа","символов"), TRUE); 
// 5 символов

$num = 12; 
echo "Двенадцать ". plural($num, array("месяц","месяца","месяцев")); 
// Двенадцать месяцев

Давайте рассмотрим функцию подробно.

Первым аргументом функция принимает число integer $num.

Вторым - массив словоформ или окончаний для числительных 1, 2 и 5 соответственно array $titles.

Ну, и третий аргумент - включить в вывод само число или нет, по умолчанию не включается boolean $print_number.

Вот и всё. Просто, не правда ли? И теперь ваш блог (или супермегапуперсайт) будет с понятными для людей окончаниями числительных.

 

Список всех статей »

home

Quality Alt
Разработка сайтов и
web-интерфейсов

8 923 232-88-90