Forums / National / Russian / Зоопарк с окончаниями

Ratibor
#625 2008-08-22 14:27
Предлагаю прекратить зоопарк с окончаниями.
Пример:
Найдено 1 совпадений

Добавить в function.php(или еще куда):

// Функция предназначена для вывода численных результатов с учетом
// склонения слов, например: "1 ответ", "2 ответа", "13 ответов" и т.д.
//
// $digit — целое число 
// можно вместе с форматированием, например "<b>6</b>"
// 
// $expr — массив, например: array("ответ", "ответа", "ответов").
// можно указывать только первые 2 элемента, например для склонения английских слов
// (в таком случае первый элемент - единственное число, второй - множественное)
// 
// $onlyword - если true, то выводит только слово, без числа
// необязательный параметр

function declension($digit,$expr,$onlyword=false)
{
        if(empty($expr[2])) $expr[2]=$expr[1];
        $i=preg_replace('/[^0-9]+/s','',$digit)%100; //intval не всегда корректно работает
        if($onlyword) $digit='';
        if($i>=5 && $i<=20) $res=$digit.' '.$expr[2];
        else
        {
                $i%=10;
                if($i==1) $res=$digit.' '.$expr[0];
                elseif($i>=2 && $i<=4) $res=$digit.' '.$expr[1];
                else $res=$digit.' '.$expr[2];
        }
        return trim($res);
}

Пример использования:
echo 'Мне уже '.declension('<b>17</b>',array('год','года','лет')).'!';
// выведет «Мне уже <b>17</b> лет!»
Код не мой, нашел в закромах инета.
Не задавай глупых вопросов, не услышишь вранья.