marceloths Postado Julho 3, 2009 Denunciar Share Postado Julho 3, 2009 Tenho uma array com vários valores, quero elaborar um sistema de ranking bem simples, por exemplo tenho array com seguinte código:$canal[0]='Globo'; $canal[1]='SBT'; $canal[2]='Globo'; $canal[3]='Globo'; $canal[4]='Record'; $canal[5]='SBT';gostaria obter o ranking de canais mais acessados. Ex:1º - Globo - 3 visitas2º - SBT - 2 visitas3º - Record - 1 visitaSó quero um pequeno exemplo.Atenciosamente, Marcelo. :mellow: Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 marlonCampos Postado Julho 4, 2009 Denunciar Share Postado Julho 4, 2009 Método da bolha.Fiz uma enquete essa semana para um site e usei este método. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 marceloths Postado Julho 4, 2009 Autor Denunciar Share Postado Julho 4, 2009 mas o método da bolha é utlizado para ordenar os números e não o texto...gostaria de um pequeno exemplo para ser montar um ranking simples somente com array.Atenciosamente, Marcelo. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jonathan Queiroz Postado Julho 4, 2009 Denunciar Share Postado Julho 4, 2009 Você pode fazer assim://Variáveis $sites=Array("Globo","SBT","Record","SBT","Globo","SBT"); //Array de sites $qtd_visitas; //Número de visitas $visitas; //Array de visitas $i; //Contador //Conta as visitas foreach($sites as $i){ //Verifica se o site já foi cadastrado nas visitas if(isset($visitas[$i])){ //Se sim, incrementa a variável $visitas[$i]++; }else{ //Se não,adciona no array de visitas com o valor em 1 $visitas[$i]=1; } } $valor; //Mostra as visitas foreach($visitas as $i => $qtd_visitas){ echo "$i: $qtd_visitas visita(s)<br>"; } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 neto.joaobatista Postado Julho 4, 2009 Denunciar Share Postado Julho 4, 2009 Tenho uma array com vários valores, quero elaborar um sistema de ranking bem simples, por exemplo tenho array com seguinte código:$canal[0]='Globo'; $canal[1]='SBT'; $canal[2]='Globo'; $canal[3]='Globo'; $canal[4]='Record'; $canal[5]='SBT'; gostaria obter o ranking de canais mais acessados. Ex: 1º - Globo - 3 visitas 2º - SBT - 2 visitas 3º - Record - 1 visita Só quero um pequeno exemplo. Atenciosamente, Marcelo. :mellow: Bom amigo, você pode utilizar as funções nativas do PHP para fazer isso: array_filter: Irá criar um filtro utilizando uma função callback arsort: Irá ordernar sua matriz de forma reversa (O maior virá primeiro e o menor por último) Primeiro você cria a função callback para trabalhar com o array_filter: /** * Pontua os elementos de uma matriz segundo o número de ocorrências * <p> * Caso seja passado o parâmetro $valor então assumiremos que estamos atuando como callback e * retornaremos sempre FALSE, se nenhum parâmetro for passado então assumiremos que estamos atuando * standalone e retornaremos uma matriz com a lista de elementos já pontuada e ordenada * </p> * * @param mixed $valor O elemento da matriz * @return boolean|array */ function rank( $valor = null ){ static $lista = array(); $ret = false; // Usamos func_num_args aqui para evitar um comportamento inesperado caso algum elemento da matriz contenha NULL if ( func_num_args() ){ if ( $valor == NULL ) $valor = "NULL"; if ( !isset( $lista[ $valor ] ) ) $lista[ $valor ] = 1; else ++$lista[ $valor ]; } else { $ret = $lista; //Ordenamos a matriz de forma reversa para que o elemento que tiver maior quantidade seje o primeiro da lista arsort( $ret ); // Reiniciamos a matriz para que a função rank possa ser utilizada como callback novamente $lista = array(); } return( $ret ); } Depois de definido seu callback você pode trabalhar com sua matriz normalmente: $canal[]='Globo'; $canal[]='Globo'; $canal[]='Globo'; $canal[]='SBT'; $canal[]='Globo'; $canal[]='Globo'; $canal[]='Record'; $canal[]='Record'; $canal[]='SBT'; $canal[]='SBT'; $canal[]='SBT'; $canal[]='Record'; // Fazemos o filtro na matriz array_filter( $canal , "rank" ); // Chamamos a função rank agora sem ser como callback, para recuperar a lista: var_dump( rank() ); ?> O código acima irá produzir: array(3) { ["Globo"]=> int(5) ["SBT"]=> int(4) ["Record"]=> int(2) }[]'sJ. Neto Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 marceloths Postado Julho 5, 2009 Autor Denunciar Share Postado Julho 5, 2009 Pessoal, obrigado pelas ajudas.Mais tarde testarei os exemplos passados por vocês. Grato, Marcelo. :D Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jonathan Queiroz Postado Julho 5, 2009 Denunciar Share Postado Julho 5, 2009 OkQuando terminar de testar posta aí, para que possamos (ou não) marcar o tópico como Resolvido Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
marceloths
Tenho uma array com vários valores, quero elaborar um sistema de ranking bem simples, por exemplo tenho array com seguinte código:
gostaria obter o ranking de canais mais acessados. Ex:
1º - Globo - 3 visitas
2º - SBT - 2 visitas
3º - Record - 1 visita
Só quero um pequeno exemplo.
Atenciosamente, Marcelo.
:mellow:
Link para o comentário
Compartilhar em outros sites
6 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.