[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: как оптимизировать скрипт изменения окончаний
art1804
Всем привет!

кусок скрипта, который отвечает за смену окончаний в соответствии с числом найденных человек.
if ($num_rows == 1)
{ $is =" работник";}
elseif ($num_rows == 2){$is =" работника";}
elseif ($num_rows == 3){$is =" работника";}
elseif ($num_rows == 4){$is =" работника";}
...
else {$is =" работников";}
echo "Найдено "$num_rows." ".$is;


А если их тысяча?!

Подскажите решение, кто сталкивался. Спасибо.



Спустя 40 секунд (14.09.2011 - 15:09) vital написал(а):
 /**
* For the formation of endings of words.
*
*
@param int $value number.
*
@param string $word0 word in the singular.
*
@param string $word1 word in the plural (2, 3).
*
@param string $word2 word in the plural.
*
@param string $separator separator, default ' '.
*
@return string formed words
*
@access private.
*/

private function morph($value, $word0, $word1, $word2, $separator = ' ')
{
if (preg_match('/1\d$/', $value))
{
return $value . $separator . $word2;
} elseif (preg_match('/1$/', $value))
{
return $value . $separator . $word0;
} elseif (preg_match('/(2|3|4)$/', $value))
{
return $value . $separator . $word1;
} else
{
return $value . $separator . $word2;

}
}


Спустя 4 минуты, 5 секунд (14.09.2011 - 15:13) art1804 написал(а):
Спасибо, Попробую применить.

Не, не понимаю как применить ((

Спустя 31 секунда (14.09.2011 - 15:14) caballero написал(а):
Цитата
А если их тысяча?!

кого тысяча? работников или окончаний?


откуси две последние цифры и разбей на диапазоны
0 ов
1 ик
2-4 ка
5-19 ков



Спустя 7 минут, 26 секунд (14.09.2011 - 15:21) art1804 написал(а):
работников smile.gif
Чем лучше откусить окончания от подстановки слова целиком?

Спустя 3 минуты, 46 секунд (14.09.2011 - 15:25) m4a1fox написал(а):
От и до.
Если 1 - то работник
иначе если от 2 до 3 - работников
иначе если 4 то работника
иначе если от 5 до 20 то работников

Спустя 4 минуты, 55 секунд (14.09.2011 - 15:30) caballero написал(а):
Цитата
Чем лучше откусить окончания от подстановки слова целиком?

от чего откусить и кого куда подставлять?
если очешь ответ формулируй вопрос так чтобы было понятно о чем речь.

Спустя 1 минута, 7 секунд (14.09.2011 - 15:31) vital написал(а):
Цитата (art1804 @ 14.09.2011 - 12:13)
Спасибо, Попробую применить.

Не, не понимаю как применить ((

Цитата
/**
    * For the formation of endings of words.
    *
    * @param int $value number.
    * @param string $word0 word in the singular.
    * @param string $word1 word in the plural (2, 3).
    * @param string $word2 word in the plural.
    * @param string $separator separator, default ' '.
    * @return string formed words
    * @access private.
    */

/**
* For the formation of endings of words.
*
* @param int $value число
* @param string $word0 единственное число.
* @param string $word1 множественное (2, 3).
* @param string $word2 word множественное 4,5...
* @param string $separator чем разделить число и слова, default ' '.
* @return string formed words
* @access private.
*/
выдрано из класса

Спустя 38 секунд (14.09.2011 - 15:31) art1804 написал(а):
Цитата (caballero @ 14.09.2011 - 12:14)
Цитата
А если их тысяча?!

кого тысяча? работников или окончаний?


откуси две последние цифры и разбей на диапазоны
0 ов
1 ик
2-4 ка
5-19 ков

0 ов
1 ик
2-4 ка
5-19 ков

как вот это теперь оформить?
Если человек сделает выборку и в ней будет 422 работниКА - Не вводить все же это вручную!

Типа:
if($num==1){$is="работник"};
...
if($num==421){$is="работник"};
...
if($num==463){$is="работникА"};
Какое-то универсальное решение должно же быть?!

Спустя 55 секунд (14.09.2011 - 15:32) caballero написал(а):
Цитата
Если 1 - то работник
иначе если от 2 до 3 - работников
иначе если 4 то работника
иначе если от 5 до 20 то работников


3 работников?
зачем давать кривые советы

Спустя 2 минуты, 39 секунд (14.09.2011 - 15:35) caballero написал(а):
Цитата
Какое-то универсальное решение должно же быть?!

А тебе каким языком написали

откусывешь от 463
получается 63
раз это больше 19 берешь последнюю цифру
3 работника

Спустя 50 секунд (14.09.2011 - 15:36) phz написал(а):

Спустя 1 минута, 2 секунды (14.09.2011 - 15:37) art1804 написал(а):
if($num==421){$is="работник"};

Попробую по-другому спросить.
Как написать код так, чтобы $num не плодить, а как-то диапазонами...
типа
if($num ==1, 21,31,41,51... ){$is="работник"};

Спустя 28 секунд (14.09.2011 - 15:37) twin написал(а):
    function endingsForm($n, $form1, $form2, $form5)  
{
$n = abs($n) % 100;
$n1 = $n % 10;

if ($n > 10 && $n < 20)
return $form5;
if ($n1 > 1 && $n1 < 5)
return $form2;
if ($n1 == 1)
return $form1;

return $form5;
}

echo endingsForm(3, 'работник', 'работника', 'работников');

Спустя 4 минуты, 36 секунд (14.09.2011 - 15:42) art1804 написал(а):
Спасибо всем за скрипты, ссылки и советы. Буду разбираться.

Спасибо,Twin. Все работает как надо! Только не понимаю как, но работает...

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.