(根据指定时间)动态划分学期分表,用以动态学期分表自动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摘取天上星线下笔记推送

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值