繁体   English   中英

条件仍不满意,php仍在运行

[英]condition not satisfied still the php is running

您好,我有一个数组,我使用for loop和内部for循环遍历它,有一些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是主键,我收到一个错误的主键条目,这是由于第case的代码所致,即case "adm"正在运行多次

您的变量$ 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'
?>

请放心,您提交的示例中似乎有很多重复的代码,您可以将其移至函数或更具动态性的循环中,以避免代码重复。

当您在代码中执行$ 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并将完美工作!!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM