Reordenação Documentada
unknown
php
4 years ago
2.9 kB
12
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...