Reordenação Documentada

 avatar
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...