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