Для начала было бы неплохо определить закономерность, по которой выставляются окончания в слове комментарий. Откроем обычный текстовый редактор, напишем в нем "комментари" и размножим по 1 на строку это слово 30 раз обычным копипастом, а затем расставим слева числа от 1 до 30, а справа - окончания. В итоге у нас получится что-то вида:

1 комментарий
2 комментария
3 комментария
...
30 комментариев


Теперь взглянем на этот список и сможем заметить следующие закономерности:
1. При последней цифре 1 - окончание будет "й". Исключение - если две последние цифры - 1 и 1. Например 1 комментарий, 21 комментарий, 11 комментариев, 111 комментариев.
2. При последней цифре от 2 до 4 включительно - окончание будет "я". Исключение из правила: числа второго десятка (от 10 до 19).
3. Во всех остальных случаях - окончание будет "ев".

Можно приступать за написание скрипта, составим короткое задание что нужно делать:
1. Чтобы в будущем удобно управлять стилем написания выводимой фразы - вложим возвращаемый результат в выбранный пользователем тег с неким классом.
2. Мы будем пользоваться функцией substr(), поэтому нам прийдётся первоначально вычислить длину числа как строки.
3. Присвоим одной переменной значение последней цифры числа комментариев, а второй переменной - двух последних цифр числа, она пригодится нам, когда мы будем определять заканчивается ли наше число на 11.
4. Вернем результат в виде
%класс%" >%число% комментари%окончание%

Вот такой должен получиться исходный код:


function comments_ending( $number )

{
$comments = "коментари";
$tag = "span";
$class = "comments_count";

$length = (int) strlen( $number );
$last = (int) substr( $number , $length - 1 , $length );
$last2 = (int) substr( $number , $length - 2 , $length );

if ( !empty( $class ) ) $class = " class=\".$class."\";

if ( ( $last > 1 && $last $last2 $last2 > 19 ) )
{
$ending = "я";
}
elseif ( $last == 1 && $last2 !== 11 )
{
$ending = "й";
}
else
{
$ending = "ев";
}

if ( $number !== 0 )
{
$result = $number . " " . $comments . $ending;
}
else
{
$result = "комментариев нет";
}
return " . $tag . $class . ">" . $result . "" . $tag . ">";
}

Если у вас возникли вопросы по данному скрипту - смело задавайте их в комментариях.

Скачать скрипт в zip архиве