Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
$format = str_replace(array("M", "F"), array($rus[$month], $rus2[$month]), $format);$format = preg_replace(array("'M'", "'F'"), array($rus[$month], $rus2[$month]), $format);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; //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>33</b>','комментарий комментария комментариев');/* Вывод оповещения о непрочитанных сообщениях выбранного пользователя */
function getUserNewMessageNotice(&$DB, $userId)
{
$MESSAGE_COUNT = getUserNewMessageCount($DB, $userId);
if (accountIsBanned($DB, $_SESSION['userId'], $_SESSION['userStatus'])
|| accountIsDeleted($DB, $_SESSION['userId'], $_SESSION['userStatus'])
|| $MESSAGE_COUNT == 0)
{ // Если новых сообщений нет или пользователь заблокирован или удалён, напоминание не выводится
return NULL;
}
$NOTICE = 'В Вашем почтовом ящике ';
switch ($MESSAGE_COUNT)
{
// Согласование существительного <сообщение> в нужном числе с количеством новых сообщений
// Одно сообщение, два сообщение, три сообщение, четыре сообщение, двадцать одно сообщение, тридцать два сообщение,
// НО! Одиннадцать писЕМ, двенадцать сообщений, тринадцать сообщений и четырнадцать сообщений.
// Для всех чисел, оканчивающихся на 1, 2, 3 и 4 окончание будет <-ий>, кроме 11, 12, 13 и 14.
// Для всех остальных - <ие>. Такой вот он забавный, русский язык.
case ((1 != floor(($MESSAGE_COUNT % 100) / 10)) && ($MESSAGE_COUNT % 10 == 1)):
$NOTICE .= 'находится '.$MESSAGE_COUNT.' новое сообщение.';
break;
case ((1 != floor(($MESSAGE_COUNT % 100) / 10)) && (($MESSAGE_COUNT % 10 == 2) || ($MESSAGE_COUNT % 10 == 3) || ($MESSAGE_COUNT % 10 == 4))):
$NOTICE .= 'находятся '.$MESSAGE_COUNT.' новых сообщения.';
break;
default:
$NOTICE .= 'находятся '.$MESSAGE_COUNT.' новых сообщений.';
break;
}
return $NOTICE;
}
<?php
$numbers = array(1, 2, 5, 23, 71, 11, 12, 13, 14);
$words = array('комментарий', 'комментария', 'комментариев');
foreach($numbers as $number) printf('%d %s
', $number, declension($number, $words));
?>
1 комментарий
2 комментария
5 комментариев
23 комментария
71 комментарий
11 комментариев
12 комментариев
13 комментариев
14 комментариев
Набор PHP-функции для создания user-friendly интерфейса на русском языке