爲學校項目創建修訂時間表,讓用戶在爲每個項目選擇主題和多少小時之前,將其輸入到2d數組中,然後將其用作表格。我已經寫了下面的代碼,通過前一頁的帖子獲取數組$ subject。未將數值放入數組
$ subject是一個二維數組,第一個級別是用戶選擇的主題,第二個是用戶需要多少小時的主題。
的代碼應採取$主題數組,並用它在一些功能來填充陣列,但是當我運行的代碼,我只是得到一個空數組
下面是代碼
<?php
$timetable = array(
"0" => array // 0 = Monday 6 = Sunday
// 0 - 23 = horus
(
"0" => '',
"1" => '',
"2" => '',
"3" => '',
"4" => '',
"5" => '',
"6" => '',
"7" => '',
"8" => '',
"9" => '',
"10" => '',
"11" => '',
"12" => '',
"13" => '',
"14" => '',
"15" => '',
"16" => '',
"17" => '',
"18" => '',
"19" => '',
"20" => '',
"21" => '',
"22" => '',
"23" => ''
),
"1" => array
(
"0" => '',
"1" => '',
"2" => '',
"3" => '',
"4" => '',
"5" => '',
"6" => '',
"7" => '',
"8" => '',
"9" => '',
"10" => '',
"11" => '',
"12" => '',
"13" => '',
"14" => '',
"15" => '',
"16" => '',
"17" => '',
"18" => '',
"19" => '',
"20" => '',
"21" => '',
"22" => '',
"23" => ''
),
"2" => array
(
"0" => '',
"1" => '',
"2" => '',
"3" => '',
"4" => '',
"5" => '',
"6" => '',
"7" => '',
"8" => '',
"9" => '',
"10" => '',
"11" => '',
"12" => '',
"13" => '',
"14" => '',
"15" => '',
"16" => '',
"17" => '',
"18" => '',
"19" => '',
"20" => '',
"21" => '',
"22" => '',
"23" => ''
),
"3" => array
(
"0" => '',
"1" => '',
"2" => '',
"3" => '',
"4" => '',
"5" => '',
"6" => '',
"7" => '',
"8" => '',
"9" => '',
"10" => '',
"11" => '',
"12" => '',
"13" => '',
"14" => '',
"15" => '',
"16" => '',
"17" => '',
"18" => '',
"19" => '',
"20" => '',
"21" => '',
"22" => '',
"23" => ''
),
"4" => array
(
"0" => '',
"1" => '',
"2" => '',
"3" => '',
"4" => '',
"5" => '',
"6" => '',
"7" => '',
"8" => '',
"9" => '',
"10" => '',
"11" => '',
"12" => '',
"13" => '',
"14" => '',
"15" => '',
"16" => '',
"17" => '',
"18" => '',
"19" => '',
"20" => '',
"21" => '',
"22" => '',
"23" => ''
),
"5" => array
(
"0" => '',
"1" => '',
"2" => '',
"3" => '',
"4" => '',
"5" => '',
"6" => '',
"7" => '',
"8" => '',
"9" => '',
"10" => '',
"11" => '',
"12" => '',
"13" => '',
"14" => '',
"15" => '',
"16" => '',
"17" => '',
"18" => '',
"19" => '',
"20" => '',
"21" => '',
"22" => '',
"23" => ''
),
"6" => array
(
"0" => '',
"1" => '',
"2" => '',
"3" => '',
"4" => '',
"5" => '',
"6" => '',
"7" => '',
"8" => '',
"9" => '',
"10" => '',
"11" => '',
"12" => '',
"13" => '',
"14" => '',
"15" => '',
"16" => '',
"17" => '',
"18" => '',
"19" => '',
"20" => '',
"21" => '',
"22" => '',
"23" => ''
)
);
$subjects = $_POST;
function pick_random_subject($subjects, $timetable)
{
$available = FALSE;
while ($available == FALSE) {
$subject = array_rand($subjects);
if (check_subject_availability($subjects, $timetable, $subject)) {
$available = TRUE;
}
}
return $subject;
}
function check_subject_availability($subjects, $timetable,$subject)
{
$count = 0;
foreach ($timetable as $day) {
$count += array_count_values($day)[$subject];
}
if ($count < $subjects[$subject]) {
return True;
} else {
return false;
}
}
function verify_available_slot($timetable, $day, $slot)
{
if ($timetable[$day][$slot] == '') {
return true;
} else {
return false;
}
}
function pick_random_slot($timetable)
{
$available = FALSE;
while ($available == FALSE) {
$day = rand(0, 6);
$hour = rand(0, 23);
$available = verify_available_slot($timetable, $day, $hour);
}
return [$day, $hour];
}
function Check_end($subjects, $timetable)
{
$finished = FALSE;
foreach ($subjects as $subject) {
if (!check_subject_availability($subjects, $timetable, $subject)) {
$finished = TRUE;
break;
}
}
return $finished;
}
if(isset($_POST)) {
while(Check_end($subjects, $timetable)== FALSE)
{
$subject = pick_random_subject($subjects, $timetable);
$slot = pick_random_slot($subject);
$day = $slot[0];
$hour = $slot[1];
$timetable[$day][$hour] = $subject;
}
}
else {
header('http://localhost/timetable/TimetableAlgorithmn.php');
}
?>
<pre>
<?print_r($timetable) ?>
<pre>
注:我認爲問題在於函數「check_subject_availability」,但我不知道。
只是一個提示:'返回$計數<$科目[$主題]'是一樣的'如果($計數< $ subjects [$ subject]){return True; } else {return false; ''但更好的可讀性,可能更快。 – Christoph
也許你可以用一個或兩個來創建這個龐大的結構?你擁有的代碼是巨大的! –