Часто во фразах встречаются окончания в англицкой манере: "в корзине 2 товар(а)", "3 товаров", "4 товаров" и т.д. Когда-то давно написал полезную функцию по частичному исправлению данной ситуации. Пользуюсь до сих пор. Но, возможно, пора пересмотреть код. Если у кого будут идеи по улучшению или свои версии, пишите. Окончания, понятное дело, не в строгом смысле, а просто для удобочитаемости. PHP: //словообразование: //1 товар, 2 товар-а, 5 товар-ов //1 рубл-ь, 2 рубл-я, 5 рубл-ей //1 работ-а, 2 работ-ы, 5 работ function declension($word,$num,$ending){//("часть слова",число,array("окончание1","окончание2","окончание3")) $lastNumber='';//последний знак в цифре if(strlen((string)$num)>1){ $lastNumber=substr((string)$num,strlen((string)$num)-1,1); }else{ $lastNumber=(string)$num; } $lastNumber=(int)$lastNumber; if($lastNumber===0){ $word.=$ending[2]; }elseif($lastNumber===1){ if($num==11){ $word.=$ending[2]; }else{ $word.=$ending[0]; } }elseif($lastNumber>=2 && $lastNumber<=4){ if($num>=12 && $num<=14){ $word.=$ending[2]; }else{ $word.=$ending[1]; } }elseif($lastNumber>=5){ $word.=$ending[2]; } return $word; } Пример использования: PHP: echo $queryN,' ',declension('запрос',$queryN,array('','а','ов')),' к бд';//9999 запросов к бд echo 'В корзине ',$mercancia,' ',declension('товар',$mercancia,array('','а','ов')),' на ',$cantidad,' ',declension('рубл',$cantidad,array('ь','я','ей'));//В корзине 8 товаров на 8 рублей
PHP: <?php //товар ра ров function rus_name_kol($kol,$word,$end1,$end2,$end3) { $kol = '0'.$kol; $l = strlen($kol)-1; $kol = $kol{$l-1}.$kol{$l}; if ($kol{0}=='1') { return $word.$end3; } else { $kol = $kol{1}+0; switch (true) { case ($kol==1): return $word.$end1; break; case (($kol<5)&&($kol>1)): return $word.$end2; break; case (($kol==0)||($kol>4)): return $word.$end3; break; } }} for ($i=0; $i<100; $i++) { print $i.' '.rus_name_kol($i,'това','р','ра','ров').'<br>'; }
PHP: <?php function getElephants($elephants) { return $elephants%10==1&&$elephants%100!=11?'слон':($elephants%10>=2&&$elephants%10<=4&&($elephants%100<10||$elephants%100>=20)?'слона':'слонов'); } for ( $i = 1; $i <= 30; $i++ ) { echo "В наличии на складе есть ".$i." ".getElephants($i)."...<br />"; } ?> Код (Text): В наличии на складе есть 1 слон... В наличии на складе есть 2 слона... В наличии на складе есть 3 слона... В наличии на складе есть 4 слона... В наличии на складе есть 5 слонов... В наличии на складе есть 6 слонов... В наличии на складе есть 7 слонов... В наличии на складе есть 8 слонов... В наличии на складе есть 9 слонов... В наличии на складе есть 10 слонов... В наличии на складе есть 11 слонов... В наличии на складе есть 12 слонов... В наличии на складе есть 13 слонов... В наличии на складе есть 14 слонов... В наличии на складе есть 15 слонов... В наличии на складе есть 16 слонов... В наличии на складе есть 17 слонов... В наличии на складе есть 18 слонов... В наличии на складе есть 19 слонов... В наличии на складе есть 20 слонов... В наличии на складе есть 21 слон... В наличии на складе есть 22 слона... В наличии на складе есть 23 слона... В наличии на складе есть 24 слона... В наличии на складе есть 25 слонов... В наличии на складе есть 26 слонов... В наличии на складе есть 27 слонов... В наличии на складе есть 28 слонов... В наличии на складе есть 29 слонов... В наличии на складе есть 30 слонов...
PHP: //print inclination(5, array(‘лошадь’,'лошади’,'лошадей’)); function inclination($time, $arr){ $timex = substr($time, -1); if ($time >=10 AND $time <=20) return $arr[2]; elseif ($timex == 1) return $arr[0]; elseif ($timex>1 AND $timex<5) return $arr[1]; else return $arr[2]; }