(根據指定時間)動態劃分學期分表,用以動態學期分表自動CURD等聯動操作(開始結束時間可修改-待完善待修改)
阿新 • • 發佈:2019-02-08
<?php header("Content-Type:text/html;charset=utf-8;"); //學期按照上學期 當年09月-跨年02月,下學期03月-08月 可修改 class Term{ public $term; public $all_row; public $tb_pix = 'db_course_log'; public $tb_fpix= 'db_student_log'; public $terms; //分表字尾前自動補年(例:2017)id=1上學期表字尾 id=2下學期表字尾(對應上下學期字典表id),start_time=學期開始月份,end_time=學期結束月份(支援跨年不需要特別宣告年份,name為預留引數欄位) public function __construct(){ $arr = [array('id'=>1,'name'=>'','start_time'=>'09','end_time'=>'02'),array('id'=>2,'name'=>'','start_time'=>'03','end_time'=>'08')]; $this->all_row = $arr; } public function get_all($ym=''){ $y = empty($ym)?date('Y',time()):substr($ym,0,4); $m = empty($ym)?date('m',time()):substr($ym,4,2); $row = $this->all_row; if($row){ $arr = []; foreach($row as $k=>$v){ $start_time = sprintf("%02d",$v['start_time']); $end_time = sprintf("%02d",$v['end_time']); if($y==''){ $y = intval($y); $last_y= $y-1;//date("Y", strtotime("-1 year")); }else{ $y = intval($y); $last_y= $y-1; } $m = intval($m); if($v['id']=='1'){ if($m>8){ $y_ = $y+1; $arr[$v['id']]['start_time'] = $y.$start_time; $arr[$v['id']]['end_time'] = $y_.$end_time; }else{ $arr[$v['id']]['start_time'] = $last_y.$start_time; $arr[$v['id']]['end_time'] = $y.$end_time; } }else{ if($m>8){ $y_ = $y+1; $arr[$v['id']]['start_time'] = $y_.$start_time; $arr[$v['id']]['end_time'] = $y_.$end_time; }else{ $arr[$v['id']]['start_time'] = $y.$start_time; $arr[$v['id']]['end_time'] = $y.$end_time; } } $arr[$v['id']]['term'] = $v['id']; } ksort($arr); $this->terms = $arr; return $arr; }else{ $this->terms = $row; } return $row; } public function get_term($ym=''){ if(''==$ym){ $ym = date('Ym',time()); } $term = 1; if(!empty($this->terms) && $ym=='') $terms=$this->terms; else $terms = $this->get_all($ym); foreach($terms as $k=>$v){ if($ym>=$v['start_time']){ $term = $k; } } $this->term = $term; $terms[$term]['term'] = $term; return $terms[$term]; } public function get_tab($ym=''){ $the_term= $this->get_term($ym); $tmp_ym = $the_term['start_time']; $tmp_y = substr($tmp_ym,0,4); if($this->term=='1'){ $xn = $tmp_y; }else{ $xn = $tmp_y-1; } $end_key = $xn.$this->term; $this->term_tab = $term_tab = $this->tb_pix.$end_key; $this->term_ftab= $this->tb_fpix.$end_key; $the_term['year'] = intval($xn); $the_term['tab_name']= $this->term_tab; $the_term['tab_fname']=$this->term_ftab; $the_term['tab_end'] = $end_key; return $the_term; } public function get_the_tab($year){ $year++; $arr = array(); $arrf= array(); $row = $this->get_all($year); foreach($row as $k=>$v){ $tmp_ym = $v['start_time']; $tmp_y = substr($tmp_ym,0,4); if($k=='1'){ $xn = $tmp_y; }else{ $xn = $tmp_y-1; } $end_key = $xn.$k; $term_tab = $this->tb_pix.$end_key; $term_tab_f= $this->tb_fpix.$end_key; $arr[$k] = $term_tab; $arrf[$k]= $term_tab_f; $row[$k]['tab_name'] = $term_tab; $row[$k]['tab_fname']= $term_tab_f; $row[$k]['tab_end'] = $end_key; $row[$k]['term'] = $k; $row[$k]['year'] = intval($xn); } return $row; } } echo "<pre>"; $st = new Term(); echo "當前時間所處學年的所有學期(時間範圍):<br/>"; var_dump($st->get_all()); echo "指定時間(201703)所處學年的所有學期(時間範圍):<br/>"; var_dump($st->get_all(201703)); echo "當前時間所處學期時間範圍:<br/>"; $term=$st->get_term(); var_dump($term); echo "指定時間(201809)的學期時間範圍:<br/>"; $term_201809 = $st->get_term(201809); var_dump($term_201809); echo "<br/>"; echo "當前時間所處學期、學年(時間範圍)以及所在學期表:<br/>"; var_dump($st->get_tab()); echo "指定時間(201909)的所處學期、學年(時間範圍)以及所在學期表:<br/>"; var_dump($st->get_tab(201909)); echo '<br/>'; echo "指定(2016屆)學年所有學期時間範圍以及所在學期表:<br/>"; var_dump($st->get_the_tab(2016)); echo "指定(2017屆)學年所有學期時間範圍以及所在學期表:<br/>"; var_dump($st->get_the_tab(2017)); ?> 註釋部分無關操作請忽略BY摘取天上星線下筆記推送