如何解决PHP自动时间表生成问题
我正在处理PHP时间表,并停留在星期四的时间段,这意味着当我生成时间表时,在星期四已经有一些索引,并且在生成后的其他几天需要移动它们。他们应该交换到其他日期,以便在星期四没有重复的主题。 因此,我需要一些想法或解决方案,以将周四保留的重复科目换成其他工作日(这种情况发生在我们有两个以上的班级时)或任何PHP逻辑来生成学校时间表。
我的目标是通过提供教师,科目,班级,工作日数以及同一天没有任何科目重复且教师空位没有任何冲突的空位数量来生成自动时间表(教师应该不能同时在两节课中上两节课。
<?PHP
ini_set('memory_limit','-1');
error_reporting(E_ERROR);
$classes = [ '10thA','10thB','10thC','10thD','10thE','10thF'];
$subTeacherPure = [
['slot'=>3,'sub' => 'islamic','t' =>'T1'],['slot'=>2,'sub' => 'tafsir','t' =>'T2'],'sub' => 'dari','t' =>'T3'],['slot'=>3,'sub' => 'pashto','t' => 'T4'],'sub' => 'English','t' =>'T5'],['slot'=>6,'sub' => 'Math','t' => 'T6'],'sub' => 'physics','t' => 'T7'],'sub' => 'chemistry','t' => 'T8'],'sub' => 'biology','t' => 'T9'],'sub' => 'histroy','t' => 'T10'],'sub' => 'geography','t' => 'T11'],['slot'=>1,'sub' => 'Computer','t' => 'T12'],'sub' => 'sport','t' => 'T13'],'sub' => 'farhang','t' => 'T14'],'sub' => 'madani','t' => 'T15'],];
$Slot = [
'islamic'=>3,'tafsir'=>2,'dari'=>2,'pashto'=>3,'English'=>3,'Math'=>6,'physics'=>3,'chemistry'=>3,'biology'=>3,'histroy'=>2,'geography'=>2,'Computer'=>1,'sport'=>1,'farhang'=>1,'madani'=>1,];
$time = 45;
$slotPerWeek = 36;
$slot_pday = 6;
$days = 6;
$breakTime = 15;
$weekDays = [
'Sat' => 'Saturday','Sun' => 'Sunday','Mon' => 'Monday','Tue' => 'Tuesday','Wed' => 'Wednesday','Thu' => 'Thursday'
];
$weekDayKeys = [
'Sat','Sun','Mon','Tue','Wed','Thu'
];
$datetime = new DateTime('Now',new DateTimeZone('GMT+4:30'));
$start = $datetime->setTime(8,0);
$schedule = [];
$teacher = [];
$teacher1 = [];
usort($subTeacherPure,function($a,$b) {
return $b['slot'] <=> $a['slot'];
});
foreach ($classes as $Ckey => $Cvalue) {
$Slots = $Slot;
$TecherSlot = 0;
foreach ($weekDayKeys as $wkey => $wname) {
for ($hr=1; $hr <= $slot_pday ; $hr++) {
$TecherSlot ++;
foreach ($subTeacherPure as $key => $value) {
if (!in_array($value['sub'],$schedule[$Cvalue][$wname]) && $Slots[$value['sub']] && !array_key_exists($TecherSlot,$teacher [$value['t']])) {
$schedule[$Cvalue][$wname][$hr] = $value['sub'];
$teacher [$value['t']][$TecherSlot]= $value['sub'];
$teacher1 [$value['t']][$wname][$hr]= $Cvalue;
$Slots [$value['sub']] -= 1;
break 1;
}
if ($Slots[$value['sub']] == 0) {
unset($Slots[$value['sub']]);
}
if ($wname == 'Thu') {
}
}
}
}
}
echo "<pre>";
//print_r($teacher1);
print_r($schedule);
//print_r($Slots);
die;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。