代码之家  ›  专栏  ›  技术社区  ›  Waeez

条件未满足php仍在运行

  •  0
  • Waeez  · 技术社区  · 6 年前

    你好,我有一个数组,我正在使用 for loop 在for loop的内部,有 switch cases 我不知道为什么我的代码在运行,即使开关条件没有满足

    这是我的代码:

    for($j=0;$j<count($fees_type_arr);$j++){
        $month = "N/A";
        switch ($fees_type_arr[$j]) {
            case 'adm':
                $sql_record_data = array(
                        'tid' => $tid.$j+1,
                        'slip_no' => $slip_no,
                        'date_time' => $current_date_time,
                        'uid' => $uid,
                        'month' => $month,
                        'amount' => $admission_fees,
                        'fees_type' => 'adm'
                );
                if($wpdb->insert($record_table, $sql_record_data)){
                    $ok = 1;
                }
                else{
                    $ok = 0;
                    throw new Exception($wpdb->print_error());
                }
            break;
    
            case "trn":
                $sql_record_data = array(
                        'tid' => $tid.$j+1,
                        'slip_no' => $slip_no,
                        'date_time' => $current_date_time,
                        'uid' => $uid,
                        'month' => $month,
                        'amount' => $transport_chg,
                        'fees_type' => 'trn'
                );
                if($wpdb->insert($record_table, $sql_record_data)){
                    $ok = 1;
                }
                else{
                    $ok = 0;
                    throw new Exception($wpdb->print_error());
                }
            break;
    
            case "ann":
                $sql_record_data = array(
                        'tid' => $tid.$j+1,
                        'slip_no' => $slip_no,
                        'date_time' => $current_date_time,
                        'uid' => $uid,
                        'month' => $month,
                        'amount' => $annual_chg,
                        'fees_type' => 'ann'
                );
                if($wpdb->insert($record_table, $sql_record_data)){
                    $ok = 1;
                }
                else{
                    $ok = 0;
                    throw new Exception($wpdb->print_error());
                }
            break;
    
            case "rec":
                $sql_record_data = array(
                        'tid' => $tid.$j+1,
                        'slip_no' => $slip_no,
                        'date_time' => $current_date_time,
                        'uid' => $uid,
                        'month' => $month,
                        'amount' => $recreation_chg,
                        'fees_type' => 'rec'
                );
                if($wpdb->insert($record_table, $sql_record_data)){
                    $ok = 1;
                }
                else{
                    $ok = 0;
                    throw new Exception($wpdb->print_error());
                }
            break;
        }
    }
    

    这是我的阵列

    $fees_type_arr = array("adm","ttn","trn","ann","rec");
    

    tid是主键,我得到了主键的错误重复条目,这是由于1st中的代码造成的 case i、 e类 case "adm" 正在运行多次

    2 回复  |  直到 6 年前
        1
  •  1
  •   SRK    6 年前

    当您在代码中执行$j+1时,它会覆盖$j的值,并再次将其设置回1。因此,每次循环都会调用第一个案例,即“adm”。您需要存储$j的实际值,并在最后将其分配回来。使用此代码。

    for($j=0;$j<count($fees_type_arr);$j++){
        $month = "N/A";
        $oldj = $j;
        switch ($fees_type_arr[$j]) {
            case 'adm':
                $sql_record_data = array(
                        'tid' => $tid.$j+1,
                        'slip_no' => $slip_no,
                        'date_time' => $current_date_time,
                        'uid' => $uid,
                        'month' => $month,
                        'amount' => $admission_fees,
                        'fees_type' => 'adm'
                );
                if($wpdb->insert($record_table, $sql_record_data)){
                    $ok = 1;
                }
                else{
                    $ok = 0;
                    throw new Exception($wpdb->print_error());
                }
            break;
    
            case "trn":
                $sql_record_data = array(
                        'tid' => $tid.$j+1,
                        'slip_no' => $slip_no,
                        'date_time' => $current_date_time,
                        'uid' => $uid,
                        'month' => $month,
                        'amount' => $transport_chg,
                        'fees_type' => 'trn'
                );
                if($wpdb->insert($record_table, $sql_record_data)){
                    $ok = 1;
                }
                else{
                    $ok = 0;
                    throw new Exception($wpdb->print_error());
                }
            break;
    
            case "ann":
                $sql_record_data = array(
                        'tid' => $tid.$j+1,
                        'slip_no' => $slip_no,
                        'date_time' => $current_date_time,
                        'uid' => $uid,
                        'month' => $month,
                        'amount' => $annual_chg,
                        'fees_type' => 'ann'
                );
                if($wpdb->insert($record_table, $sql_record_data)){
                    $ok = 1;
                }
                else{
                    $ok = 0;
                    throw new Exception($wpdb->print_error());
                }
            break;
    
            case "rec":
                $sql_record_data = array(
                        'tid' => $tid.$j+1,
                        'slip_no' => $slip_no,
                        'date_time' => $current_date_time,
                        'uid' => $uid,
                        'month' => $month,
                        'amount' => $recreation_chg,
                        'fees_type' => 'rec'
                );
                if($wpdb->insert($record_table, $sql_record_data)){
                    $ok = 1;
                }
                else{
                    $ok = 0;
                    throw new Exception($wpdb->print_error());
                }
            break;
        }
        $j = $oldj;
    }
    

    它会将实际价值重新分配到$j,并将完美运行!!

        2
  •  1
  •   Mihir Bhende    6 年前

    变量$tid看起来像一个字符串。因此,即使$j是一个增量整数,$tid$j+1将得到1。

    您可以将其更改为$tid。($j+1)(添加括号)。

    示例:

    <?php 
    $tid = 'test';
    $j = 10;
    echo $tid.$j+1;
    // returns 1
    ?>
    

    变更后:

    <?php 
    $tid = 'test';
    $j = 10;
    echo $tid.($j+1);
    // returns 'test11'
    ?>
    

    简单地说,您提交的示例中似乎有很多重复代码,您可以将其移动到函数或更动态的循环中,以避免代码重复。