Skip to content

Instantly share code, notes, and snippets.

@NimaGhaedsharafi
Last active December 28, 2019 11:39
Show Gist options
  • Save NimaGhaedsharafi/e5936bd9579bfa55f5f843b1c4dba15b to your computer and use it in GitHub Desktop.
Save NimaGhaedsharafi/e5936bd9579bfa55f5f843b1c4dba15b to your computer and use it in GitHub Desktop.
<?php
$ppl = [
'Mohammad' => [
Carbon::SATURDAY => 0,
Carbon::SUNDAY => 0,
Carbon::MONDAY => 0,
Carbon::TUESDAY => 1,
Carbon::WEDNESDAY => 0
],
'Farnaz' => [
Carbon::SATURDAY => 1,
Carbon::SUNDAY => 0,
Carbon::MONDAY => 0,
Carbon::TUESDAY => 0,
Carbon::WEDNESDAY => 1
],
'Alireza' => [
Carbon::SATURDAY => 1,
Carbon::SUNDAY => 0,
Carbon::MONDAY => 1,
Carbon::TUESDAY => 0,
Carbon::WEDNESDAY => 1
],
'Mojtaba' => [
Carbon::SATURDAY => 1,
Carbon::SUNDAY => 0,
Carbon::MONDAY => 1,
Carbon::TUESDAY => 0,
Carbon::WEDNESDAY => 1
],
'Farbod' => [
Carbon::SATURDAY => 0,
Carbon::SUNDAY => 1,
Carbon::MONDAY => 0,
Carbon::TUESDAY => 1,
Carbon::WEDNESDAY => 1
],
'Aylin' => [
Carbon::SATURDAY => 0,
Carbon::SUNDAY => 1,
Carbon::MONDAY => 0,
Carbon::TUESDAY => 1,
Carbon::WEDNESDAY => 1
],
'Leila' => [
Carbon::SATURDAY => 1,
Carbon::SUNDAY => 0,
Carbon::MONDAY => 1,
Carbon::TUESDAY => 1,
Carbon::WEDNESDAY => 0
],
'Milad' => [
Carbon::SATURDAY => 1,
Carbon::SUNDAY => 1,
Carbon::MONDAY => 1,
Carbon::TUESDAY => 1,
Carbon::WEDNESDAY => 0
],
];
$dates = [];
$start = Carbon::tomorrow();
$end = Carbon::parse('2020-03-20');
$currentDay = $start;
$pplQ = new SplQueue();
foreach ($ppl as $key => $person) {
$pplQ->enqueue([$key => $person]);
}
while (true) {
if ($currentDay->diffInDays($end) == 0) {
break;
}
if (in_array($currentDay->dayOfWeek, [Carbon::THURSDAY, Carbon::FRIDAY])) {
$currentDay->addDay();
continue;
}
$person = $pplQ->dequeue();
if ($person[key($person)][$currentDay->dayOfWeek]) {
$dates[key($person)][] = $currentDay->toDateString();
$pplQ->enqueue($person);
} else {
$pplQ->add(0, $person);
}
$currentDay->addDay();
}
dump($dates);
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment