За последние 24 часа нас посетил 85801 программист и 7965 роботов. Сейчас ищут 3855 программистов ...

Оптимизация условий

Тема в разделе "PHP для новичков", создана пользователем grimmlex, 25 ноя 2015.

  1. grimmlex

    grimmlex Новичок

    С нами с:
    25 ноя 2015
    Сообщения:
    4
    Симпатии:
    0
    Здравствуйте, можно ли как-нибудь избежать такого громоздкого кода?
    Код (PHP):
    1. if($text == 1) {
    2.         $word1 = "рубль";
    3.         echo "$word1 <br />";
    4.     }elseif ($text == 21){
    5.        $word1 = "рубля";
    6.         echo "$word1 <br />";
    7.     }elseif ($text == 31){
    8.        $word1 = "рубля";
    9.         echo "$word1 <br />";
    10.     }elseif ($text == 41) {
    11.        $word1 = "рубля";
    12.         echo "$word1 <br />";
    13.     }
    14. и так далее до 91...
    15.  
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.870
    Симпатии:
    955
    Re: Оптимизация словий

    switch ?

    Добавлено спустя 1 минуту 14 секунд:
    а, понял, ты склонение хочешь. все просто делается - гугли "пхп склонение слов после числительных"
     
  3. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    я где то видел код буквально в пару строк, который склонял все, правда он был на С++ если мне не изменяет память.
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    не знаю, как он для русского, но приспособить точно можно
    Код (PHP):
    1. function getNumEnding($number, $endingArray)
    2. {
    3.   $number = $number % 100;
    4.   if ($number>=11 && $number<=19) {
    5.     $ending=$endingArray[2];
    6.   }
    7.   else {
    8.     $i = $number % 10;
    9.     switch ($i)
    10.     {
    11.       case (1): $ending = $endingArray[0]; break;
    12.       case (2):
    13.       case (3):
    14.       case (4): $ending = $endingArray[1]; break;
    15.       default: $ending=$endingArray[2];
    16.     }
    17.   }
    18.   return $ending;
    19. }
     
  5. grimmlex

    grimmlex Новичок

    С нами с:
    25 ноя 2015
    Сообщения:
    4
    Симпатии:
    0
    Я остановился на:
    Код (PHP):
    1. function inclineWord($number)
    2. {
    3.     $last2Digits = $number % 100;
    4.     switch($last2Digits)
    5. {
    6.     case 1: case 21: case 31: case 41: case 51: case 61: case 71: case 81: case 91:
    7.       //echo ("рубль<br />");
    8.       $number = "рубль"; 
    9.       break;
    10.     case 2: case 3: case 4: case 22: case 23: case 24: case 32: case 33: case 34: case 42: case 43: case 44:  
    11.      // echo ("рубля <br />");
    12.      $number = "рубля"; 
    13.     break;
    14.     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:    
    15.      // echo ("рубля <br />");
    16.       $number = "рубля";
    17.     break;
    18.     default:         
    19.      // echo ("рублей <br />");
    20.       $number = "рублей";
    21. } 
    22. return $number;
    23. } 
     
  6. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    Код (PHP):
    1. function morph($n, $f1, $f2, $f5) {
    2.     $n = abs(intval($n)) % 100;
    3.     if ($n>10 && $n<20) return $f5;
    4.     $n = $n % 10;
    5.     if ($n>1 && $n<5) return $f2;
    6.     if ($n==1) return $f1;
    7.     return $f5;
    8. }
    9. echo morph(7, 'рубль','рубля','рублей');