PHP – функция склонения слов

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

Функция принимает  три параметра, хотя третий и не является обязательным. В первом передаётся само число, во втором параметре массив из трех элементов содержащий три вариации написания склоняемого слова, а в третьем параметре задаем флаг отображения числа. Если параметр стоит true, то будет выводится само число в результате работы функции, иначе выведется просто нужное склонение.

function declension($digit,$expr,$onlyword=true) //склонение слов
    {
        if(!is_array($expr)) $expr = array_filter(explode(' ', $expr));
        if(empty($expr[2])) $expr[2]=$expr[1];
        $i=preg_replace('/[^0-9]+/s','',$digit)%100;
        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);
}

Передаваемые параметры

— $digit – передаваемое целое числительное, например “44″; можно использовать вместе с html-тэгами оформления;

— $expr – массив формы слова, следующего после числительного, например “array(‘комментарий’, ‘комментария’, ‘комментариев’)”; 1,21,31… комментарий, 2,3,4,22,23,24… комментария, 5,6…9,10,11…20,25,26… комментариев;

— $onlyword – если стоит true, то функция будет возвращать только существительное, идущее после числительного.

Вызов функции

$count = 3;
echo "На сайт добавлено ".declension($count, array('комментарий', 'комментария', 'комментариев'));

Результат:
«На сайт добавлено 3 комментария»


Комментарии: