Правильные окончания слов

Уроки по PHP, Javascript и т.п.
Аватара пользователя
Skaler
Сообщения: 38
Зарегистрирован: 22 мар 2010, 23:29

Re: Правильные окончания слов

Сообщение Skaler »

Я такое решение придумал, пусть может не самое лучшее, но работает безотказно:

Код: Выделить всё

 switch ( (ns.value.toString()).charAt( (ns.value.toString()).length - 1) )     {        case "1" : tf.text = " " + ns.value.toString() + " значок"; break;        case "2" : case "3" : case "4" : mc_store.tf_exchange.text = " " + ns.value.toString() + " значка"; break;        case "5" : case "6" : case "7" : case "8" : case "9" : case "0" : tf.text = " " + ns.value.toString() + " значков"; break;    }switch ( (ns.value.toString()).charAt( (ns.value.toString()).length - 2) ) + (ns.value.toString()).charAt( (ns.value.toString()).length - 1) )    {        case "11" : case "12" : case "13" : case "14" : tf.text = " " + ns.value.toString() + " значков"; break;    } 
ns - NumericStepper
tf - TextField
xShinigami
Сообщения: 7
Зарегистрирован: 22 окт 2010, 10:40

Re: Правильные окончания слов

Сообщение xShinigami »

Код: Выделить всё

 function takesklon($n, $form = array()) {        $takesklon = ($n % 10 == 1 && $n % 100 != 11 ? 0 : ($n % 10 >= 2 && $n % 10 <= 4 && ($n % 100 < 10 or $n % 100 >= 20) ? 1 : 2));        switch($takesklon) {            case 0:            default:                return $form[0];            case 1:                return $form[1];            case 2:                return $form[2];        }    } 
так лучше имхо)
Аватара пользователя
bodnar
Модератор
Модератор
Сообщения: 1399
Зарегистрирован: 03 апр 2010, 06:41

Re: Правильные окончания слов

Сообщение bodnar »

xShinigami писал(а):

Код: Выделить всё

switch($takesklon) {            case 0:            default:                return $form[0];            case 1:                return $form[1];            case 2:                return $form[2];        }
ох, а лучше ли заменить на

Код: Выделить всё

return $form[$takesklon]
turikhay
Сообщения: 26
Зарегистрирован: 01 фев 2011, 15:50

Re: Правильные окончания слов

Сообщение turikhay »

я тут набросал код для статистики посещений на php. может, кому пригодиться :D

Код: Выделить всё

$count = $counters->by_id($id); // Считаем, сколько раз посетили страницу с идом $id$subtr = substr($count,-1); // Вырезаем последнюю цифру из счетчикаif ($count > 20){    if ($substr == 2 or $substr == 3 or $substr == 4)    {        echo "раза";    }    else    {        echo "раз";    }}else{    if ($count > 4 or $count == 1 and $count < 22)    {        echo "раз";    }    elseif ($count !== 1 or $count == 2 or $count == 3 or $count == 4)    {        echo "раза";    }}
вроде, работоспособная штука :)
p.s.
написал еще тогда, когда только начинал постигать php :) не ругайсяма :D кстати, до сих пор стоит на моем сайте :D
Noise Gate
Сообщения: 691
Зарегистрирован: 28 апр 2010, 12:34

Re: Правильные окончания слов

Сообщение Noise Gate »

Александр писал(а):Если остаток от 5 до 12, то будет значение 0 - "дней"
Наверное, имеется ввиду, до 20. По крайей мере, в коде - именно так.
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: Правильные окончания слов

Сообщение Александр »

Да, От 5 до 20 всегда 0 - "дней".
gpv123
Сообщения: 346
Зарегистрирован: 29 янв 2012, 20:57

Re: Правильные окончания слов

Сообщение gpv123 »

Набросал такой код:

Код: Выделить всё

package {    /* Создаем функцию NumberCase:     *     * number - число;     * IpEch - слово в именительном падеже и в единственном числе;     * RpEch - слово в родительном падеже и в единственном числе;     * RpMch - слово в родительном падеже и во множественном числе;     */    public function NumberCase(number:Number, IpEch:String, RpEch:String, RpMch:String)    {        const END:String = (String(number).replace('.',',')) + ' ';// Тут хранится начало выдаваемой строки         if (number < 0)        {            number = (-1*number);//Если число отрицательное, то делаем его положительным        }         const NUM100:Number = number % 100;        const NUM10:Number = number % 10;        const NUM1:Number = number % 1;         if (NUM1 > 0)        {            return END + RpEch;        }        else if (((NUM100 >= 5) && (NUM100 <= 20)) || (NUM10 >= 5) || (NUM100 == 0))        {            return END + RpMch;        }        else if (NUM10 == 1)        {            return END + IpEch;        }        else if ((NUM10 >= 2) && (NUM10 <= 4))        {            return END + RpEch;        }    }}
Проверял на:

Код: Выделить всё

trace(NumberCase(          1, 'день', 'дня', 'дней')); //           1 деньtrace(NumberCase(         15, 'день', 'дня', 'дней')); //          15 днейtrace(NumberCase(        1.1, 'день', 'дня', 'дней')); //         1,1 дняtrace(NumberCase(        4.7, 'день', 'дня', 'дней')); //         4,7 дняtrace(NumberCase(       1589, 'день', 'дня', 'дней')); //        1589 днейtrace(NumberCase(   -156.753, 'день', 'дня', 'дней')); //    -156,753 дняtrace(NumberCase(   64354165, 'день', 'дня', 'дней')); //    64354165 днейtrace(NumberCase(      64564, 'день', 'дня', 'дней')); //       64564 дняtrace(NumberCase(    1456748, 'день', 'дня', 'дней')); //     1456748 днейtrace(NumberCase(532.4563746, 'день', 'дня', 'дней')); // 532,4563746 дняtrace(NumberCase(-8574.56345, 'день', 'дня', 'дней')); // -8574,56345 дня
Ответить