Problema Na Ordenação De Arrays
Vou descrever a situação e explicando o que está acontecendo de errado.
No Banco de Dados, tenho os campos "datas" e "horarios" pertencentes a uma tabela...
Os formatos destes campos são:
datas = 23/08/2010;24/08/2010;25/08/2010;(...)
horarios = 13:00:00;15:00:00;17:00:00;19:00:00;(...)
Cada data e cada horário está separado por ";" (ponto e vírgula).
Pois bem, o código deve funcionar da seguinte maneira:
1) O PHP pega a data atual no servidor (variável $data) e o horário de "agora" (variável $horario);
2) Procura no BD os registros que contenham a data atual no campo "datas" (através do LIKE no SELECT);
3) Dentro dos registros encontrados, é necessário pegar o campo "horarios" e dar um explode pelo ";", transformando os horários em arrays;
4) São exibidos na tela somente os horários que sejam MAIORES ou IGUAIS ao horário de "agora" (variável $horario definida no início);
Até aqui tudo ok! O problema vem a seguir:
4) É necessário exibir na tela todos os horários que atendam aos critérios, mas com ordenação crescente.
Já tentei de tudo quando é maneira, todos os tipos de sorts, array_merge, array_combine, array_multisort e outros. Acontece que ele exibe os horários de forma ordenada dentro de cada array gerada, mas não une as arrays para ordenar todos os horários.
Alguma idéia de como fazer isso??? Ficarei extremamente grato por qualquer ajuda. Abraços!
Segue abaixo o código:
<?php
$data = date("d/m/Y");
$hora = date("H:i:s");
$consulta = mysql_query("SELECT datas,horarios FROM tabela WHERE datas LIKE '%$data%'");
while($i = mysql_fetch_array($consulta)) {
$horarios = explode(";", $i[1]);
array_multisort($horarios, SORT_ASC, SORT_REGULAR);
foreach ($horarios as $key => $horarios_each) {
if ($horarios_each >= $hora) {
echo $horarios_each."<br />";
}
}
}
?>
O resultado é o seguinte (precisa ficar ordenado):
22:00:00 | array 1
23:55:00 |
23:56:00 |
23:57:00 |
23:58:00 |
23:59:00 |
--------
23:15:00 | array 2
23:30:00 |
23:45:00 |
23:50:00 |
23:56:00 |
--------
21:30:00 | array 3
23:00:00 |
No Banco de Dados, tenho os campos "datas" e "horarios" pertencentes a uma tabela...
Os formatos destes campos são:
datas = 23/08/2010;24/08/2010;25/08/2010;(...)
horarios = 13:00:00;15:00:00;17:00:00;19:00:00;(...)
Cada data e cada horário está separado por ";" (ponto e vírgula).
Pois bem, o código deve funcionar da seguinte maneira:
1) O PHP pega a data atual no servidor (variável $data) e o horário de "agora" (variável $horario);
2) Procura no BD os registros que contenham a data atual no campo "datas" (através do LIKE no SELECT);
3) Dentro dos registros encontrados, é necessário pegar o campo "horarios" e dar um explode pelo ";", transformando os horários em arrays;
4) São exibidos na tela somente os horários que sejam MAIORES ou IGUAIS ao horário de "agora" (variável $horario definida no início);
Até aqui tudo ok! O problema vem a seguir:
4) É necessário exibir na tela todos os horários que atendam aos critérios, mas com ordenação crescente.
Já tentei de tudo quando é maneira, todos os tipos de sorts, array_merge, array_combine, array_multisort e outros. Acontece que ele exibe os horários de forma ordenada dentro de cada array gerada, mas não une as arrays para ordenar todos os horários.
Alguma idéia de como fazer isso??? Ficarei extremamente grato por qualquer ajuda. Abraços!
Segue abaixo o código:
<?php
$data = date("d/m/Y");
$hora = date("H:i:s");
$consulta = mysql_query("SELECT datas,horarios FROM tabela WHERE datas LIKE '%$data%'");
while($i = mysql_fetch_array($consulta)) {
$horarios = explode(";", $i[1]);
array_multisort($horarios, SORT_ASC, SORT_REGULAR);
foreach ($horarios as $key => $horarios_each) {
if ($horarios_each >= $hora) {
echo $horarios_each."<br />";
}
}
}
?>
O resultado é o seguinte (precisa ficar ordenado):
22:00:00 | array 1
23:55:00 |
23:56:00 |
23:57:00 |
23:58:00 |
23:59:00 |
--------
23:15:00 | array 2
23:30:00 |
23:45:00 |
23:50:00 |
23:56:00 |
--------
21:30:00 | array 3
23:00:00 |
comentários (0)
suspender
Lista de Respostas:
09/09/2010 10:24am
(~14 anos atrás)
(~14 anos atrás)
leia a documentação para as funções usort e strcasecmp