Оглавление

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

Функция склонения

/**
 * Функция склонения слов
 *
 * @param mixed $digit
 * @param mixed $expr
 * @param bool $onlyword
 * @return
 */
function declension($digit, $expr, $onlyword = false)
{
    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 <= 0) {
            return false;
        } elseif ($i == 1) {
            $res = $digit . ' ' . $expr[0];
        } elseif ($i >= 2 && $i <= 4) {
            $res = $digit . ' ' . $expr[1];
        } else
            $res = $digit . ' ' . $expr[2];
    }
    return trim($res);
}

Применение для русских слов

Применить данную функцию для русских слов можно так:

$comments = 15;
return declension($comments, 'Опубликован Опубликовано', true). ' '. declension($comments, 'комментарий комментария комментариев');

На выходе получим:

Опубликовано 15 комментариев

Применение для английских слов

Применить данную функцию для английских слов можно так:

$comments = 15;
return declension($comments, 'Published Posted', true). ' '. declension($comments, 'comment comments');

На выходе получим:

Posted 15 comments