1. 程式人生 > >(根據指定時間)動態劃分學期分表,用以動態學期分表自動CURD等聯動操作(開始結束時間可修改-待完善待修改)

(根據指定時間)動態劃分學期分表,用以動態學期分表自動CURD等聯動操作(開始結束時間可修改-待完善待修改)

<?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摘取天上星線下筆記推送