Jump to content


hbm

Member Since 02/09/2010
Offline Last Active 05/01/2011, 18:33
-----

Topics I've Started

Criação E Ordenação De Arrays

05/01/2011, 14:20

Olá!! Estou com um problema com arrays........ Se alguém estiver disposto a dar uma mão, agradeço!

A questão é a seguinte:
1) Faço uma query no mySQL
2) Para cada registro encontrado, faço uma query várias vezes
3) Com while destes resultados, gero arrays dinamicamente para cada registro encontrado
3) Depois, preciso "misturar" todas essas arrays e exibir em ordem pelo campo "datahorario"

Na prática, está desta forma:

Na consulta, são identificadas em uma tabela todos os profissionais de uma empresa.
Em seguida, são identificados todos os compromissos de cada um destes profissionais, em suas respectivas tabelas, desta forma:

<?php

$tabela_empresa = "empresa_74";

$consulta_profissionais = mysql_query("SELECT id,tipo FROM $tabela_empresa WHERE tipo = 'profissional'");

while ($i = mysql_fetch_array($consulta_profissionais)) {

$profissional_id = $i[0];
$tabela_profissional = "usuario_".$profissional_id;

$consulta_compromissos = mysql_query("SELECT id,tipo,datahorario,tarefa FROM $tabela_profissional WHERE tipo = 'compromisso' ORDER BY datahorario DESC");

$todos = array();

while ($row = mysql_fetch_array($consulta_compromissos)) {

$id = $row[0];
$datahorario = $row[2];
$tarefa = $row[3];

$todos[] = array("datahorario" => $datahorario,
"tarefa" => $tarefa,
"id" => $id);

$c = count($todos);

for ($j=0; $j<$c; $j++) {
$all = array_merge($todos[$j]);
}

foreach ($all as $value) {
if ($value == "") {
echo "";
} else {
echo $value."<br />";
}
}

echo "<br />";

}

}

?>

Até aqui, estão sendo geradas arrays das tarefas de cada profissional, contendo os três campos cada. No momento de exibir as tarefas, são mostradas as tarefas de cada profissional, sendo que assim que termina de exibir o profissional "1", passa a exibir as tarefas do "2", e assim por diante.

O que preciso é "misturar" todas as tarefas de todos os profissionais e exibí-las ordenadas pelo campo "datahorario" de cada array.

Tem como??

Problema Na Ordenação De Arrays

02/09/2010, 21:35

Olá pessoal, sou novo aqui no fórum e gostaria de pedir uma mão para quem puder me ajudar.

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 |

IPB Skin By Virteq