是一个“开关”最好在以下场景中使用


Is a "switch" the best to use in the following scenario?

我有一个很长的代码在php,它可以缩短任何其他方法使用switch或其他方式?我有一个工资率表,不同的州对相同的名称有不同的工资率。我想在表中插入值的array,其中有一个特定的名称(desg)和state,然后相应地计算速率。

表:

id  desgn      rate   state
1   MAZDOOR    6600   MN
2   SKD-I      10890  MN
3   SKD-I      11400  MZ
4   SKD-II     9270   MN
5   SKD-II     9300   MZ

我的脚本到目前为止:

if(!empty($_POST['u'])) {
    foreach ($_POST['u'] as $uid) {
        $sql=mysql_query("select * from cpl_pay_temp where id='$uid' ");
        while ($cal = mysql_fetch_array($sql)) {
            $ticket=$cal['ticketno'];
            // $month_yr=$_POST['month'];
            $desgn=$cal['desg'];
            $empname=$cal['name'];
            $empdesg=$cal['desg'];
            $cat=$cal['sex'];
            $father=$cal['fathersname'];
            $present=$cal['day_present'];
            $state=$cal['state'];
            if(($desgn=='MAZDOOR')&& ($state=='MZ')) {
                $sql_rate=mysql_query("select * from cpl_rate_mast where desg='MAZDOOR' and state='MZ'");
                $rate=mysql_result($sql_rate,$i,'rate') ;
                $pay=round($present*($rate/$days)); 
            }
            if(($desgn=='MAZDOOR')&& ($state=='MN')) {
                $sql_rate=mysql_query("select * from cpl_rate_mast where desg='MAZDOOR' and state='MN'");
                $rate=mysql_result($sql_rate,$i,'rate') ;
                $pay=round($present*($rate/$days)); 
            } 
            if(($desgn=='SKD-I') && ($state=='MZ')){
                $sql_rate=mysql_query("select * from cpl_rate_mast where desg='SKD-I' and state='MZ'");
                $rate=mysql_result($sql_rate,$i,'rate') ;
                $pay=round($present*($rate/$days)); 
            }
            if(($desgn=='SKD-I') && ($state=='MN')) {
                $sql_rate=mysql_query("select * from cpl_rate_mast where desg='SKD-I' and state='MN'");
                $rate=mysql_result($sql_rate,$i,'rate') ;
                $pay=round($present*($rate/$days)); 
            }
            if(($desgn=='SKD-I') && ($state=='MZ')){
                $sql_rate=mysql_query("select * from cpl_rate_mast where desg='SKD-I' and state='MZ'");
                $rate=mysql_result($sql_rate,$i,'rate') ;
                $pay=round($present*($rate/$days)); 
            }
            if(($desgn=='SKD-II') && ($state=='MN')) {
                $sql_rate=mysql_query("select * from cpl_rate_mast where desg='SKD-II' and state='MN'");
                $rate=mysql_result($sql_rate,$i,'rate') ;
                $pay=round($present*($rate/$days)); 
            }
            if(($desgn=='SKD-II') && ($state=='MZ')) {
                $sql_rate=mysql_query("select * from cpl_rate_mast where desg='SKD-II' and state='MZ'");
                $rate=mysql_result($sql_rate,$i,'rate') ;
                $pay=round($present*($rate/$days)); 
            }
            if(($desgn=='SKD-III') && ($state=='MN')) {
                $sql_rate=mysql_query("select * from cpl_rate_mast where desg='SKD-III' and state='MN'");
                $rate=mysql_result($sql_rate,$i,'rate') ;
                $pay=round($present*($rate/$days)); 
            }
            if(($desgn=='SKD-III') && ($state=='MZ')) {
                $sql_rate=mysql_query("select * from cpl_rate_mast where desg='SKD-III' and state='MZ'");
                $rate=mysql_result($sql_rate,$i,'rate') ;
                $pay=round($present*($rate/$days)); 
            }
            if(($desgn=='HSKD') && ($state=='MN')){
                $sql_rate=mysql_query("select * from cpl_rate_mast where desg='HSKD' and state='MN'");
                $rate=mysql_result($sql_rate,$i,'rate') ;
                $pay=round($present*($rate/$days)); 
            } 
            if(($desgn=='HSKD') && ($state=='MZ')){
                $sql_rate=mysql_query("select * from cpl_rate_mast where desg='HSKD' and state='MZ'");
                $rate=mysql_result($sql_rate,$i,'rate') ;
                $pay=round($present*($rate/$days)); 
            }
            mysql_query("insert into  cpl_pay(billno,ticketno,name,desg,sex,fathersname,day_present,total_wages,from_date,to_date,status,state) values('$vrno','$ticket','$empname','$desgn','$cat','$father','$present','$pay','$fdate1','$tdate2','Y','$state' )  ") or die(mysql_error());

下面是我的注释的快速演示,如果您发现在整个页面中复制和粘贴相同的代码,则需要重新编写脚本。您的代码片段中似乎没有包含所有的变量,所以我不能保证它会正常工作。旁注,您需要为数据库连接切换到PDOmysqli_:

<?php
function FetchCPL($array = false)
    {
        $rate   =   0;
        $design =   (!empty($array['design']))? mysql_real_escape_string($array['design']) : false;
        $state  =   (!empty($array['state']))? mysql_real_escape_string($array['state']) : false;
        $count  =   (!empty($array['count']) && is_numeric($array['count']))? $array['count'] : 1;
        if($design && $state) {
                $sql_rate   =   mysql_query("select * from `cpl_rate_mast` where `desg` = '".$design."' and `state` = '".$state."'");
                $rate       =   mysql_result($sql_rate,$i,'rate') ;
            }
         return $rate;
    }
    if(!empty($_POST['u'])) {
            foreach ($_POST['u'] as $uid) {
                    $sql    =   mysql_query("select * from `cpl_pay_temp` where `id` = '".mysql_real_escape_string($uid)."'");
                    while ($cal = mysql_fetch_array($sql)) {
                            $empdesg    =   $cal['desg'];
                            $pay        =   round($present*(FetchCPL(array("design"=>$cal['desg'],"state"=>$cal['state'], "count"=>$i))/$days));    
                            mysql_query("insert into  `cpl_pay`
                                (`billno`,`ticketno`,`name`,`desg`,`sex`,`fathersname`,`day_present`,`total_wages`,`from_date`,`to_date`,`status`,`state`) 
                                values('$vrno','".$cal['ticketno']."','".$cal['name']."','".$cal['desg']."','".$cal['sex']."','".$cal['fathersname']."','".$cal['day_present']."','$pay','$fdate1','$tdate2','Y','".$cal['state']."' )  ") or die(mysql_error());
                        }
                }
        }
?>