Склонение слов в PHP после цифр

Довольно частой задачей на PHP является склонение слов, которые идут после какого-либо числа, например, 1 день, 2 дня, 5 дней или 1 раз, 2 раза, 5 раз или 1 год, 2 года, 5 лет.

Данную задачу решить довольно легко, используя специальную функция и массив слов.

function plural_type($n) {
return ($n%10==1 && $n%100!=11 ? 0 : ($n%10>=2 && $n%10<=4 && ($n%100<10 || $n%100>=20) ? 1 : 2));
}

$_plural_years = array(‘год’, ‘года’, ‘лет’);
$_plural_months = array(‘месяц’, ‘месяца’, ‘месяцев’);
$_plural_days = array(‘день’, ‘дня’, ‘дней’);
$_plural_times = array(‘раз’, ‘раза’, ‘раз’);

$var = 1;
echo $var.’ ‘.$_plural_years[plural_type($var)];
//1 год

$var = 3;
echo $var.’ ‘.$_plural_days[plural_type($var)];
//3 дня

$var = 5;
echo $var.’ ‘.$_plural_months[plural_type($var)];
//5 месяцев

$var = 8;
echo $var.’ ‘.$_plural_times[plural_type($var)];
//8 раз

Главное в этой конструкции – это функция plural_type, в которую мы передаем число. ДЛя вывода правильного слова мы используем массив, в котором 3 значения. В зависимости от того, что возвращает функция, будет выбрано соответствующее слово из массива.

Это далеко не единственный вариант, который позволяет склонять слова на PHP, но мне из всех просмотренных он понравился больше всего, т.к. функция довольно компактная, и очень легко создавать свой массив с любыми другим словами, например, граммами или метрами.

скопированно с : http://wmasterland.ru/content/склонение-слов-в-php-после-цифр

Advertisements

One Response to Склонение слов в PHP после цифр

  1. Немного усовершенствовал

    // echo pluralType(5, ‘days’);
    // выведет 5 дней

    function pluralType($n, $type) {

    $_plural[‘years’] = array(‘год’, ‘года’, ‘лет’);
    $_plural[‘months’] = array(‘месяц’, ‘месяца’, ‘месяцев’);
    $_plural[‘days’] = array(‘день’, ‘дня’, ‘дней’);
    $_plural[‘times’] = array(‘раз’, ‘раза’, ‘раз’);

    return $_plural[$type][($n%10==1 && $n%100!=11 ? 0 : ($n%10>=2 && $n%10<=4 && ($n%100=20) ? 1 : 2))];

    }

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: