我目前在PHP中有2个日期 - “开始”日期和“结束日期”。然后我使用我发现的名为createDateRangeArray
($date_range
)的函数创建了一个日期数组。为简单起见,结束日期始终为今天的日期。
我还有一个单独的数组,其中包含一堆日期($valid_dates
),它们总是介于上面提到的开始日期和结束日期之间。在那些日期,“事情”发生了 - 在这种情况下,是一个培训课程。
我正试着弄清楚以下内容:
$date_range
数组的日期范围,根据是否在该日期发生训练课程,填充为TRUE或FALSE。我很高兴这是一个带有名为date
的密钥的关联数组,比方说,session_found
(bool)。有人可以指出我正确的方向获取上述信息,而不使用foreach
内容$date_range
,然后必须使用另一个foreach
来$valid_dates
1 {} $date_range
数组中每个项目的数组?这非常低效......
很抱歉,如果我对所有这些信息过于复杂,那么任何帮助都会非常感激。
我目前在Debian Wheezy上使用PHP 5.4,如果这有帮助(典型的LAMP堆栈)。
由于
答案 0 :(得分:3)
这是完全未经测试的,但如下所示:
你应该得到最长连胜和萧条的结束日期,以及花了多少天。 $ sessions将包含一个以日期为键的数组,对于有会话的天数为true,对于没有会话的天数为false。
还是一个foreach,但我不认为你可以避免使用它。让我知道它是否有效,我真的不知道这个代码的表现如何,但希望能给你一个起点?
$streak = 0;
$slump = 0;
$longeststreak = 0;
$longestslump = 0;
$longeststreakend = 0;
$longestslumpend = 0;
foreach ($date_range as $date) {
if (in_array($date, $valid_date)) {
$sessions[$date] = true;
$streak++;
// Slump broken, record the length if it beat the previous record
if ($longestslump < $slump) {
$longestslump = $slump;
$longestslumpend = $date;
}
$slump=0;
}
else {
$sessions[$date] = false;
$slump++;
// Streak broken, record the length if it beat the previous record
if ($longeststreak < $streak) {
$longeststreak = $streak;
$longeststreakend = $date;
}
$streak=0;
}
}