Reordenação Documentada
unknown
php
4 years ago
2.9 kB
8
Indexable
<?php # vetor com listagem natural dos plantonistas $doutores = ['A', 'B', 'C', 'D', 'E']; # este é o vetor responsável pro registrar a sequência de vetores $plantoes = []; # nesta variável é criado um objeto DateTime para o dia 03/12/2021 pra ficar fidedigno ao exemplo de requisição $data = new DateTime('2021-12-03'); # o objeto intervalo, é o que há de mais diferente em meio a isso # nele, eu uso a string P4D que significa: PERÍODO de 4 dias # esse intervalo é usado para fazer somas de datas ou mesmo subtração # vamos observar isso logo adiante $intervalo = new DateInterval('P4D'); for($x = 0; $x < 10; $x++){ # aqui eu pego a data do objeto DateTime no formato d/m/Y # em seguida essa data é usada como chave do vetor de registro dos plantoes $dataFmt = $data->format('d/m/Y'); # agora o nosso vetor plantões recebe esses dados: $plantoes["d/m/Y"] => $doutores; $plantoes[$dataFmt] = $doutores; # esse momento do código aqui, é onde crio uma lógica de apresentação da lista de plantões # é algo totalmente ignorável, ele basicamente apresenta cada plantão com um hífen # após o nome de cada plantonista para o dia echo "<div/> Plantão {$dataFmt}: "; for($z = 0; $z < count($doutores); $z++){ echo "{$doutores[$z]}"; if($z < count($doutores) - 1) echo " - "; } # aqui sim, temos uma lógica que é importante na ordenação # eu observei que o array ele tem as posições alternadas, # de modo que o último médico do plantão atual, seja o primeiro do próximo: # ONTEM: [A, B, C, D, E], HOJE: [E, B, C, D, A] # então, aqui se percebe que esse array só precisa ser reposicionado 4 vezes e não 5 # pois assim 4 vezes se tira o primeiro item e o coloca no lugar do último, de modo que # o último elemento, se torne o primeiro ao fim das 4 iterações # NATURALMENTE:A - B - C - D - E (Plantão atual) # 1ª ITERAÇÃO: B - C - D - E - A # 2ª ITERAÇÃO: C - D - E - A - B # 3ª ITERAÇÃO: D - E - A - B - C # 4ª ITERAÇÃO: E - A - B - C - D (Próximo plantão) # Se iterássemos uma vez a mais, o vetor voltaria para o primeiro estágio, o que não seria interessante. for($w = 0; $w < (count($doutores) - 1); $w++){ $doutores[] = array_shift($doutores); } echo "</div>"; # aqui eu preparo a data que será a chave do array $plantões na próxima iteração # é onde o objeto DateTime tem sua data inicial 03/12/2021 # acrescido em 4 dias (que é o período presente no objeto DateInterval) # então a data vai de 03/12/2021 para 07/12/2021 # se no objeto DateInterval houvesse um período de 1 ano como: P1Y # a data da mesma forma seria acrescida em 1 ano indo de 03/12/2021 para 03/12/2022 $data->add($intervalo); }
Editor is loading...