I’ve currently got 2 dates in PHP – a ‘start’ date and an ‘end’ date. I have then created an array of dates, using a function I found called createDateRangeArray ($date_range). For simplicity, the end date will always be today’s date.
I’ve also got a separate array that contains a bunch of dates ($valid_dates) that will always fall between the start and end dates mentioned above. On those dates, ‘something’ happened – in this case, a training session.
I’m trying to get my head around getting the following:
- A range of dates similar to the
$date_rangearray, populated with TRUE or FALSE based on whether or not a training session happened on that date. I’m happy for this to be an assoc array with keys nameddateand, say,session_found(bool). - The longest ‘streak’ i.e. the longest consecutive number of days that training sessions occurred.
- The longest ‘slump’ i.e. the longest consecutive number of days that training sessions did NOT occur.
Can someone point me in the right direction for getting the above info without using a foreach on the contents of the $date_range array and then having to use another foreach for the $valid_dates array on each item in the $date_range array? That is horribly inefficient …
Sorry if I’ve over-complicated things with all that info but any help would be much appreciated.
I’m currently using PHP 5.4 on Debian Wheezy, if that helps (typical LAMP stack).
Thanks
This is completely untested, but how about something like the following:
You should get the end date of the longest streak and slump, as well as how many days it took. $sessions will contain an array with the dates as the keys, and true for days with sessions, and false for days without.
Still a foreach, but I dont think you can avoid using one. Let me know if it works, I really dont have any idea how well this code will behave, but hopefully will give you a starting point?