Show next value of an Array based on the previously found value

0

I can not show the sequence element of an Array with schedules.

I created a $ hour variable that stores the local time, and an array with several times $ os, so I search for an equal time, if it has it, but if it does not, I want to show the next time.

Look what I've done:

$hora = date('Hi');
$os = array('1632','1635','1638','1654','1642');

    if( in_array($hora, $os)){

        echo "Proximo onibus as : " . $hora;
    }else{

        echo  // Comparar e dar o valor subsequente ao valor da hora 
              // encontrada
    }

};

Any suggestions?

    
asked by anonymous 16.02.2016 / 20:31

2 answers

1

Pay attention with time differences / timezones with the server or the values stored in the database.

Try this:

$hora = date('Hi');
$os = array('1632','1635','1638','1654','1642');

// pega o próximo
sort($os); // caso garanta que $os estará ordenado, pode tirar essa linha
$proximo = '';
foreach ($os as $h) {
    if ($h - $hora >= 0) {
        $proximo = $h;
        break;
    }   
}

// mostra mensagem
if (empty($proximo)) {
    echo "Não haverá mais ônibus após esse horário hoje";
} else {
    echo "Próximo ônibus: " . $proximo;
}
    
16.02.2016 / 20:55
0

This is the simplest way I've found:

<?php

$hora = date('Hi');
$os = array(1632,1635,1638,1654,1642,2200,2300,2305,2308,2310,2320,2330 );

foreach($os as $o){
// echo "<li>$o";
  if($hora == $o){
    echo "<p>O horário foi encontrado: " . $o ."</p>";
    break;
  }
  if($o > $hora){
    echo "<p>O horário não foi encontrado, mas o próximo é: ".$o." </p>";
    break;
  }

}

?>
    
17.02.2016 / 02:10