我有一個asbolute噩夢處理的數字陣列,其具有以下結構:分離數組有效
奇數數組中:NumberRepresenting週數組
即使號碼:NumberRepresenting時間
因此,例如在陣列中:
index : value
0 : 9
1 : 1
2 : 10
3 : 1
將意味着在第1天(星期一)9 + 10。
問題是,我有一個不可預知的數字,我需要計算出每天有多少「會話」。會話的規則是,如果他們在不同的日子,他們會自動進行不同的會話。如果它們彼此相鄰,就像示例9 + 10中那樣將被視爲單個會話。最大數量可以直接放在eachother旁邊。3.在此之後,至少需要1個會話中斷才能算作新會話。
不幸的是,我們不能也假設數據將被排序。它將始終遵循偶數/奇數模式,但可能不會將邏輯上彼此相鄰的會話存儲在數組中。
我需要計算出有多少會話。
到目前爲止我的代碼如下:
for($i = 0; $i < (count($TimesReq)-1); $i++){
$Done = false;
if($odd = $i % 2)
{
//ODD WeekComp
if(($TimesReq[$i] != $TimesReq[$i + 2])&&($TimesReq[$i + 2] != $TimesReq[$i + 4])){
$WeeksNotSame = true;
}
}
else
{
//Even TimeComp
if(($TimesReq[$i] != ($TimesReq[$i + 2] - 1))&& ($TimesReq[$i + 2] != ($TimesReq[$i + 4] - 1)))
$TimesNotSame = true;
}
if($TimesNotSame == true && $Done == false){
$HowMany++;
$Done = true;
}
if($WeeksNotSame == true && $Done == false){
$HowMany++;
$Done = true;
}
$TimesNotSame = false;
$WeeksNotSame = false;
}
然而,這不是完美的工作。例如,如果您有單個會話,然後休息然後雙重會話,則它不起作用。它將這算作一個會話。
這可能就像你猜測的那樣是一門課程問題,但這不是課本中的問題,它是我正在實施的時間表系統的一部分,並且需要它來運行。所以請不要以爲我只是把我的作業複製粘貼給你們!
非常感謝!
新代碼被使用:
if (count($TimesReq) % 2 !== 0) {
//throw new InvalidArgumentException();
}
for ($i = 0; $i < count($TimesReq); $i += 2) {
$time = $TimesReq[$i];
$week = $TimesReq[$i + 1];
if (!isset($TimesReq[$i - 2])) {
// First element has to be a new session
$sessions += 1;
$StartTime[] = $TimesReq[$i];
$Days[] = $TimesReq[$i + 1];
continue;
}
$lastTime = $TimesReq[$i - 2];
$lastWeek = $TimesReq[$i - 1];
$sameWeek = ($week === $lastWeek);
$adjacentTime = ($time - $lastTime === 1);
if (!$sameWeek || ($sameWeek && !$adjacentTime)) {
if(!$sameWeek){//Time
$Days[] = $TimesReq[$i + 1];
$StartTime[] = $TimesReq[$i];
$looking = true;
}
if($sameWeek && !$adjacentTime){
}
if($looking && !$adjacentTime){
$EndTime[] = $TimesReq[$i];
$looking = false;
}
//Week
$sessions += 1;
}
}
數據連續4周應該發生什麼?如果這被認爲是2次會議,或者代碼是否應該認識到要求(只連續3次會議)被破壞? – ghbarratt 2012-02-23 06:13:27
預先驗證將意味着這不會發生。抱歉應該更具體。最多連續3次,直到休息。 – user1096685 2012-02-23 10:01:55
你說甚至索引(在你的例子中爲0和2)代表幾周,但後來表明9 + 10會是同一個會話(所以在你的例子中只有一個會話),但如果他們是星期不會他們是單獨的會議? (第9周時間= 1,第10周時間= 1)。還是我完全困惑?此外,你提到幾天,但沒有關於天的數據。天/星期可以互換使用嗎? – 2012-02-23 12:06:50