Склонение слов

Рейтинг: 1Ответов: 1Опубликовано: 18.01.2015

Здравствуйте, есть код.

<?php

if (!defined('DATALIFEENGINE')) {
    die('Доступ ограничен!');
}

$allcount = dle_cache('news_count');
if(empty($allcount)){
    $allcount = $db->super_query("SELECT count(*) as c FROM ".PREFIX."_post WHERE approve");
    $allcount = $allcount['c'];
    create_cache('news_count',$allcount);
}

function declOfNumallcount($numcount, $titlescount) {
    $casescount = array (2, 0, 1, 1, 1, 2);
    return $numcount." ".$titlescount[($numcount%100>4 && $numcount%100<20)? 2 : $casescount[min($numcount%10, 5)]];
}

echo declOfNumallcount('<span>'.$allcount.'</span>', array('<font>материал</font>', '<font>материала</font>', '<font>материалов</font>'));

?>

Может, что не так сделал, но при значении 122 он выводит слово материалов.

Ответы

▲ 2Принят

Проверяйте

UPDATE #1:

echo declOfNumallcount($allcount, array('материал', 'материала', 'материалов'));

UPDATE #2:

function declOfNumallcount($numcount, $titlescount) {
    $casescount = array (2, 0, 1, 1, 1, 2);
    return $titlescount[($numcount%100>4 && $numcount%100<20)? 2 : $casescount[min($numcount%10, 5)]];
}

$allcount = 122;
$endWord = declOfNumallcount($allcount , array('', 'а', 'ов'));
echo "{$allcount} <div>материал{$endWord}</div>";

или же sandbox

Повторюсь, не используйте <font>.