Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: switch() или ... ?
 
 автор: UdeeX   (20.03.2007 в 10:06)   письмо автору
 
 

Как по другому организовать эту грамоздную проверку?

Заранее спс!


    switch($st){
        case 1:    
        
            switch($den)
            {
                case 1:
                    $bt=0.88;
                    break;
                case 2:
                    $bt=0.86;
                    break;
                case 3:
                    $bt=0.84;
                    break;
                case 4:
                    $bt=0.81;
                    break;
                case 5:
                    $bt=0.80;
                    break;
            }
            break;        
    
        case 2:
            switch($cena){

            case "50 000 $":
                switch($den)
                {
                    case 1:
                        $bt=2.50;
                        break;
                    case 2:
                        $bt=2.47;
                        break;
                    case 3:
                        $bt=2.44;
                        break;
                    case 4:
                        $bt=2.41;
                        break;
                    case 5:
                        $bt=2.30;
                        break;
                }
                break;

             case "70 000 $":
                switch($den)
                {
                    case 1:
                        $bt=2.90;
                        break;
                    case 2:
                        $bt=2.88;
                        break;
                    case 3:
                        $bt=2.86;
                        break;
                    case 4:
                        $bt=2.84;
                        break;
                    case 5:
                        $bt=2.82;
                        break;
                }
                break;

            case "100 000 $":
                switch($den)
                {
                    case 1:
                        $bt=3.50;
                        break;
                    case 2:
                        $bt=3.38;
                        break;
                    case 3:
                        $bt=3.36;
                        break;
                    case 4:
                        $bt=3.34;
                        break;
                    case 5:
                        $bt=3.32;
                        break;
                }
                break;
            }
            break;
        
        
        case 4:
            switch($cena){

            case "10 000 $":
                switch($den)
                {
                    case 1:
                        $bt=1.00;
                        break;
                    case 2:
                        $bt=0.98;
                        break;
                    case 3:
                        $bt=0.96;
                        break;
                    case 4:
                        $bt=0.94;
                        break;
                    case 5:
                        $bt=0.92;
                        break;
                }
                break;

            case "15 000 $":
                switch($den)
                {
                    case 1:
                        $bt=1.2;
                        break;
                    case 2:
                        $bt=1.08;
                        break;
                    case 3:
                        $bt=1.06;
                        break;
                    case 4:
                        $bt=1.04;
                        break;
                    case 5:
                        $bt=1.02;
                        break;
                }
                break;

            case "20 000 $":
                switch($den)
                {
                    case 1:
                        $bt=1.3;
                        break;
                    case 2:
                        $bt=1.28;
                        break;
                    case 3:
                        $bt=1.26;
                        break;
                    case 4:
                        $bt=1.24;
                        break;
                    case 5:
                        $bt=1.22;
                        break;
                }
                break;

            case "25 000 $":

                switch($den)
                {
                    case 1:
                        $bt=1.40;
                        break;
                    case 2:
                        $bt=1.38;
                        break;
                    case 3:
                        $bt=1.36;
                        break;
                    case 4:
                        $bt=1.34;
                        break;
                    case 5:
                        $bt=1.32;
                        break;
                }
                break;

            case "30 000 $":

                switch($den)
                {
                    case 1:
                        $bt=1.50;
                        break;
                    case 2:
                        $bt=1.48;
                        break;
                    case 3:
                        $bt=1.46;
                        break;
                    case 4:
                        $bt=1.44;
                        break;
                    case 5:
                        $bt=1.42;
                        break;
                }
                break;
            }
            break;
    }

   
 
 автор: Trianon   (20.03.2007 в 11:16)   письмо автору
 
   для: UdeeX   (20.03.2007 в 10:06)
 

В этом коде сложно проследить логику.
Что должно происходить, если $cena="75 000 $"? А если $cena="70 000$"? А если $st = 3?

   
 
 автор: ZuArt   (20.03.2007 в 12:28)   письмо автору
 
   для: UdeeX   (20.03.2007 в 10:06)
 

1) Ну например вывести простейшие мат. законы =))) а для тех вариантов, где они не отрабатывают через условие сделать явное присваивание

switch($st)
{
 case 1:    
  $bt = 0.90 - 0.02*$den
  if ($den == 4) $bt = 0.81;
  break;        
 case 2:
  switch($cena)
  {
     case "50 000 $":
      $bt = 2.53 - 0.03*$den;
       if($den = 5) $bt=2.30;
      break;
     ...
  }
  break;
  ....
}


2) попробовать организовать массив
$bts = array()
$bts[1][1] = 0.88
$bts[1][2] = 0.86
...
$bts[2]["50 000 $"][1] = 2.50;
$bts[2]["50 000 $"][2] = 2.47;
$bts[2]["50 000 $"][3] = 2.44;
$bts[2]["50 000 $"][4] = 2.41;
$bts[2]["50 000 $"][5] = 2.30;
...


и обращаться в элементу по


switch($st)
{
 case 1:    
  $bt = $bts[1][$den]
  break;        
 case 2:
  $bt = $bts[2][$cena][$den];
  break;
  ....
}


можно поиграться и вообще обращаться $bts[$st][$cena][$den]; но тут нун тада все равно проверку делать на спорных моментах... типа
if($st==1) $cena = "0";
ну и соответствующие элементы прописать $bts[1]["0"][1] = 0.88 - типа такого...

   
 
 автор: Trianon   (20.03.2007 в 12:55)   письмо автору
 
   для: ZuArt   (20.03.2007 в 12:28)
 

О! Предлагаю такой вариант:
<?
$options 
= array('1/1/' =>   0.88'1/2/' => 0.86'1/3/' => 0.84'1/4/' => 0.81'1/5/' => 0.80,
'2/1/50 000 $' =>2.50,'2/2/50 000 $' =>2.47,'2/3/50 000 $' =>2.44,'2/4/50 000 $' =>2.41,'2/5/50 000 $' =>2.30,....);
                  
if((
$bt = @$options["$st/$cena/$den"]) !== false)
    echo 
$bt;

Кто короче?

   
 
 автор: ZuArt   (20.03.2007 в 13:05)   письмо автору
 
   для: Trianon   (20.03.2007 в 12:55)
 

=))))
плагиататор ;)

   
 
 автор: Trianon   (20.03.2007 в 13:13)   письмо автору
 
   для: ZuArt   (20.03.2007 в 13:05)
 

Ах вот как?
И что же я потырил?
:))))

   
 
 автор: ZuArt   (20.03.2007 в 13:23)   письмо автору
 
   для: Trianon   (20.03.2007 в 13:13)
 

самое дорогое ='(( - идейку... не... Идею... даже нее... ИДЕИЩУ!!!
;)))

   
 
 автор: UdeeX   (20.03.2007 в 14:44)   письмо автору
 
   для: Trianon   (20.03.2007 в 12:55)
 

Trianon огромное спасибо за помощь!!!

   
 
 автор: UdeeX   (20.03.2007 в 14:43)   письмо автору
 
   для: ZuArt   (20.03.2007 в 12:28)
 

ZuArt огромное спасибо за идею. Вы меня выручили!!!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования