Здравствуйте, можно ли как-нибудь избежать такого громоздкого кода? Код (PHP): if($text == 1) { $word1 = "рубль"; echo "$word1 <br />"; }elseif ($text == 21){ $word1 = "рубля"; echo "$word1 <br />"; }elseif ($text == 31){ $word1 = "рубля"; echo "$word1 <br />"; }elseif ($text == 41) { $word1 = "рубля"; echo "$word1 <br />"; } и так далее до 91...
Re: Оптимизация словий switch ? Добавлено спустя 1 минуту 14 секунд: а, понял, ты склонение хочешь. все просто делается - гугли "пхп склонение слов после числительных"
я где то видел код буквально в пару строк, который склонял все, правда он был на С++ если мне не изменяет память.
не знаю, как он для русского, но приспособить точно можно Код (PHP): function getNumEnding($number, $endingArray) { $number = $number % 100; if ($number>=11 && $number<=19) { $ending=$endingArray[2]; } else { $i = $number % 10; switch ($i) { case (1): $ending = $endingArray[0]; break; case (2): case (3): case (4): $ending = $endingArray[1]; break; default: $ending=$endingArray[2]; } } return $ending; }
Я остановился на: Код (PHP): function inclineWord($number) { $last2Digits = $number % 100; switch($last2Digits) { case 1: case 21: case 31: case 41: case 51: case 61: case 71: case 81: case 91: //echo ("рубль<br />"); $number = "рубль"; break; case 2: case 3: case 4: case 22: case 23: case 24: case 32: case 33: case 34: case 42: case 43: case 44: // echo ("рубля <br />"); $number = "рубля"; break; case 52: case 53: case 54: case 62: case 63: case 64: case 72: case 73: case 74: case 82: case 83: case 84: case 92: case 93: case 94: // echo ("рубля <br />"); $number = "рубля"; break; default: // echo ("рублей <br />"); $number = "рублей"; } return $number; }
Код (PHP): function morph($n, $f1, $f2, $f5) { $n = abs(intval($n)) % 100; if ($n>10 && $n<20) return $f5; $n = $n % 10; if ($n>1 && $n<5) return $f2; if ($n==1) return $f1; return $f5; } echo morph(7, 'рубль','рубля','рублей');