[Resolvido] Ordenando elementos de um array
Olá pessoal..
Estou com o seguinte problema:
Eu tenho um sistema de atendimento, onde os funcionarios atendem as ligações e etc.
Pois bem, eu precisei criar uma lógica para pegar o numero de atendidas.
Meu chefe quer que eu mostre em ordem decrescente como se fosse um ranking de operadores, ou seja. o cara que atendeu mais ligações, tem nota 10 e esta em primeiro lugar, o segundo, terceiro e assim por diante..
Porém como os dados vem aleatóriamente no banco, não têm como ordenalos, pois buscam de tabelas diferentes. Ex:
Passa pelo primeiro loop e pega o primeiro funcionario, o primeiro atendeu 10.
Passa pelo segundo, o segundo atendeu 3.
Passa pelo terceiro, o terceiro atendeu 20.
...
Depois disso são definidas as notas e etc e mostrado na tela, as notas funcionam, mas aparecem na ordem em que é chamada no banco.
A solução que eu encontrei foi guardar essas informações em uma array, e assim, ordenar a array, e imprimir na tela.
Mas como eu faço isso?
O codigo que eu criei para vocês terem uma ideia é mais ou menos assim:
<?php
include "conexao.inc";
$dataIni = "2009-01-01 00:00:00";
// data inicial
$dataFim = "2009-01-04 23:59:59";
// data final
// --- com essa data eu defino os dias que eu quero puxar da base para gerar o relatorio ---
// --- ela vem de um campo pelo metodo get, mas aqui esta como exemplo ---
$sql = "SELECT idFunc FROM portalDCM.cadFunc WHERE vip = 0 and habilitado = 1 ORDER BY idFunc ASC";
// faco o primeiro select para pegar o id do funcionario
$res = mysql_query($sql);
while($funcionario = mysql_fetch_array($res)){
// coloco dentro de um loop para ele fazer outra consulta a cada funcionario que ele achar
$idFunc = $funcionario['idFunc'];
$busca = "SELECT lp FROM portalDCM.controleatend WHERE idFunc = '$idFunc' AND dataFim > '$dataIni' AND dataFim < '$dataFim' order by dataIni ASC";
// com base no id do funcionario eu vou fazer uma busca para ver quantas chamadas ele atendeu
$resultado = mysql_query($busca);
$chamadas = mysql_num_rows($resultado);
// numero de chamadas
if($chamadas > 0){
// defino aqui, caso o funcionario nao tenha atendido, nao preciso mostra-lo na tela
while($dados = mysql_fetch_array($resultado)){
// o que eu faço aqui?
}
}
}
?>Ps: Já testei jogar em arrays bidimensionais, krsort(), mas nada adianta..
[RESOLVIDO]
Não sei porque ocorre esse problema, mas fiz umas modificações aqui e funcionou..
O problema ocorre sempre que eu defino o asort(array) à uma variável, se eu apenas usar a função ele não retorna erro no foreach.
abaixo a solução com a devida explicação.
// resto do codigo acima... sem modificacoes
$chamadas = mysql_num_rows($resultado);
// numero de chamadas
if($chamadas > 0){
$rank[$idFunc] = $chamadas;
// atribui o idFunc como chave da array
}
}// fim do while.
arsort($rank);
// se eu tivesse atribuido essa funcao a uma variavel daria erro no foreach ( $nome = arsort($rank) )
// obviamente modificaria tambem os parametros do foreach com a o nome da variavel acima.
foreach($rank as $func => $quant_cham){
echo $func." @ ".$quant_cham."<br />";
}Qualquer coisa, ler o resto do tópico.
Discussão (2)
Carregando comentários...