Jump to content
Dexter Morgan

Setar posição depois do usort

Recommended Posts

Preciso colocar a posição do jogador depois de usar o usort mas se o jogador tiver a mesma pontuação a posição tem que ser igual:
 

$array_tennis_players = $query_ranking_tennis_player->rankings;
usort($array_tennis_players, function($a, $b){
return $b['points'] > $a['points'];
});

$count_position = 1;
foreach($array_tennis_players AS $key_position => $value_position){
$array_tennis_players[$key_position]['position'] = $count_position++;
}


Então no foreach e coloco a posição com um contador, porém se o jogador tiver a mesma pontuação a posição tem que ser a mesma, exemplo:

posição 13 - jogador x - 67,5
posição 13 - jogador y - 67,5

Mas como fiz sai assim:


posição 13 - jogador x - 67,5
posição 14 - jogador y - 67,5

Share this post


Link to post
Share on other sites

Você não conseguirá controlar a posição se utilizar a chave do array. Você até poderia criar arrays internos, mas isso apenas deixaria o controle mais complex.

 

Utilize variáveis auxiliares:

$lastPontuation = -1;
$position = 0;

foreach($list as $key => player)
{
    $position = $player['points'] == $lastPontuation ? $position : $key + 1;

    printf("%d - %d" , $position , $player['points']);

    $lastPontuation = $player['points'];
}

Apenas adapte ao seu código.

Edited by Gabriel Heming
  • +1 1

Share this post


Link to post
Share on other sites

Gabriel não funcionou ainda está somando a posição:

$lastPontuation = -1;
$count_position = 0;
foreach($array_tennis_players AS $key_position => $value_position){

$count_position = $value_position['points'] == $lastPontuation ? $count_position : $key_position + 1;
echo '<pre>'; print_r($query_ranking_tennis_player['category'] . ' | ' . $count_position . ' - ' . $value_position['points']); echo '</pre>';

}
4F2 | 1 - 1542
4F2 | 2 - 1320
4F2 | 3 - 930
4F2 | 4 - 900
4F2 | 5 - 900
4F2 | 6 - 735
4F2 | 7 - 735
4F2 | 8 - 704.25
4F2 | 9 - 615
4F2 | 10 - 615
4F2 | 11 - 600
4F2 | 12 - 510
4F2 | 13 - 450
4F2 | 14 - 270
4F2 | 15 - 141.75
4F2 | 16 - 135
4F2 | 17 - 67.5
4F2 | 18 - 67.5
4F2 | 19 - 67.5
4F2 | 20 - 67.5
4F2 | 21 - 67.5
4F2 | 22 - 0
4F2 | 23 - 0
4F2 | 24 - 0

 

Edited by Gabriel Heming
remover o quote

Share this post


Link to post
Share on other sites

Acabou que no exemplo que eu criei, faltou uma linha. Eu corrigi lá.

 

  • +1 1

Share this post


Link to post
Share on other sites

Parece que não havia salvo a edição.

  • +1 1

Share this post


Link to post
Share on other sites
24 minutos atrás, Gabriel Heming disse:

Parece que não havia salvo a edição.


Estamos quase chegando lá, olha como saiu:
 

4F2 | 1 - 1542
4F2 | 2 - 1320
4F2 | 3 - 930
4F2 | 4 - 900
4F2 | 4 - 900
4F2 | 6 - 735
4F2 | 6 - 735
4F2 | 8 - 704.25
4F2 | 9 - 615
4F2 | 9 - 615
4F2 | 11 - 600
4F2 | 12 - 510
4F2 | 13 - 450
4F2 | 14 - 270
4F2 | 15 - 141.75
4F2 | 16 - 135
4F2 | 17 - 67.5
4F2 | 17 - 67.5
4F2 | 17 - 67.5
4F2 | 17 - 67.5
4F2 | 17 - 67.5
4F2 | 22 - 0
4F2 | 22 - 0
4F2 | 22 - 0


Ele pula quando se repete

Share this post


Link to post
Share on other sites

Não é que ele pula, ele apenas está normalizando a lista. De uma maneira geral, está correto. Veja o exemplo abaixo:

Posição | Pontuação | Nome
1       | 100       | Gabriel
1       | 100       | João
1       | 100       | Fernando
4       | 95        | Guilherme

Não é porquê não existe segundo e terceiro colocados que o Guilherme deveria ser o segundo. Pois, na frente dele existem 3 pessoas. Logo, ele é o quarto colocado.

 

Esse tipo de classificação é  a mais comum de ser encontrada.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By alexandre_xto
      Bom dia amigos, este é meu primeiro post, espero que consiga lhes passar meu problema
      Eu possuo várias imagens de vários tamanhos e dimensões.
      De cada uma quero realizar uma copia quadrada.
      por exemplo, se a imagem  tiver 800x600 quero criar uma 800x800, esse 200 a mais de lagura quero que fique branco sem esticar as fotos.
      Se tenho uma foto 300x600 quero que ela fique com 600x600.
      O Script deve identificar se ela é mais alta ou mais baixa e criar uma cópia baseando-se no que for maior e deve fazer isso sem distorcer a imagem.
      Se for colocado uma 1500x300 ela deve sair 1500x1500, a diferença de 1200 a mais deve ser branca.

    • By RodrigoWD3
      Boa tarde pessoal estou com uma dúvida, seguinte estou criando uma pagina de blog para teste de url amigável ja configurei o .htaccess  , o banco de dados , as postagem com slugs , o problema e que só consigo exibir a noticia completa quando ha uma categoria exemplo .
       
      O site exibe assim :  meusite.com.br/noticias/post-da-noticia/   
      Queria desse jeito: meusite.com.br/post-da-noticia/
       
      porem não queria exibir a categoria noticias, pois os posts vão esta na index
      vou colocar o código da index, acredito que a configuração seja nela
       
      INDEX.PHP
      <?php include "admin/conexao.php"; require_once("include/header.php"); @$url = $_GET['url']; $urlE = explode('/',$url); @$arquivo = $urlE['0']; @$post = $urlE['1']; $paginas = array('empresa','noticias','categoria','contato'); if(isset($post) && $post != ''){ include "single.php"; }elseif(isset($arquivo) && in_array($arquivo, $paginas)){ include "$arquivo.php"; }elseif(isset($arquivo) && $arquivo == ''){ include "home.php"; }else{ include "categoria.php"; } require_once("include/footer.php"); ?>  
    • By opl12
      Olá Mestres
      Podem dar uma direção?
      Estou apanhando em algo que aparentemente é fácil
      Preciso: 
                  *Tenho um Banco de Dados com as Colunas: Id, nome, password, data, nivel             ... na coluna "nivel" tem duas informações ou é "staff" ou é "operacao"               *no 1º Select ele vai validar se o usuário e a senha estão corretos conforme no Banco de Dados do PhpMyAdmin             pelas variáveis $nome e $password               *no 2º Select ele valida o nível de acesso, se é "staff" ou "operacao"             se o $nome pertencer a um "staff".. então abre o "Site A"... se pertencer a um "operacao" vai para o "Site B"  
      <!DOCTYPE html> <html lang="pt-br"> <head> <title>Comprovar Usuário</title> <meta charset="utf-8"> </head> <body> <?php try { $base=new PDO("mysql:host=localhost;dbname=painel","root",""); $base->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // ....... select para validar login e senha se estão ok $sql="SELECT * FROM login WHERE nome= :nome AND password= :password"; $resultado=$base->prepare($sql); $nome=($_POST["nome"]); $password=($_POST["password"]); $resultado->bindValue(":nome",$nome); $resultado->bindValue(":password",$password); $resultado->execute(); $numero_registro=$resultado->rowCount(); //Validar Camada de Nível $sql2="SELECT * FROM login WHERE name= :nome AND nivel = 'staff'"; $resultado2=$base2->prepare($sql2); $nome=($_POST["nome"]); $resultado2->bindValue(":nome",$nome); $resultado2->execute(); $numero_registro2=$resultado2->rowCount(); if($numero_registro!=0) { //echo "<h1>Logado com Sucesso</h1>"; ...Se Login e Senha estão ok, então abre a página session_start(); $_SESSION["usuario"] = $_POST["nome"]; header("Location:reports.php"); }else { echo "Senha incorreta, favor verificar! <br><br>"; echo '<a href="index.php">Clique aqui para tentar novamente!</a>'; //header("Location:index.php"); } }catch(Exception $e) { die("Error" . $e->getMessage()); } ?> </body> </html>  
    • By opl12
      Olá Mestres,
      Não achei um tópico com este assunto
       
      No Código abaixo, eu dou um echo e me retorna o valor de um array,
      *que é o resultado de um SELECT feito no Banco de Dados PhpMyAdmin
      *no banco tenho a tabela LOGIN, com as colunas: Nome, Password, Nivel
       
      no PHP eu carrego as variáveis $nome e $password
      com isso eu faço um select com uma condição na coluna "nivel" .. para me trazer apenas o resultado onde consta a palavra "staff" na coluna "nivel"
       
      ao dar um echo:
      echo $key.": ".$value."<br>";  
      o PHP me retorna:
      nome: jeferson
      password: 123
      nivel: staff
       
      ***a pergunta:
      Tem como eu gravar o resultado da coluna "nivel" ( que neste caso é "staff" ) em uma variável?? ao ponto de dar um echo e aparecer apenas a palavra "staff" ?
       
      Se puderem me ajudar, já agradeço
       
      <!DOCTYPE html> <html lang="pt-br"> <head> <title>Comprovar Usuário</title> <meta charset="utf-8"> </head> <body> <?php $nome = "jeferson"; $password = "123"; try { $base=new PDO("mysql:host=localhost;dbname=painel","root",""); $base->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql="SELECT nome, password, nivel FROM login WHERE nome= :nome AND password= :password"; $resultado=$base->prepare($sql); $resultado->bindValue(":nome",$nome); $resultado->bindValue(":password",$password); $resultado->execute(); $result = $resultado->fetch(PDO::FETCH_ASSOC); foreach ($result as $key => $value) { echo $key.": ".$value."<br>"; } }catch(Exception $e) { die("Error" . $e->getMessage()); } ?> </body> </html>  
       
       
       
    • By jonathasouza
      Como eu poderia colocar um botão no para setar um valor na tabela do php?
      meu codigo php abaixo, eu gostaria que ele colocasse o valor onclick $nome na parte do analista da tabela via modal.
       
       
       

          <?php
      $nome = isset($_GET["nome"])? $_GET["nome"]:null;
      $matricula = isset($_GET["matricula"])? $_GET["matricula"]:null;
      $solicitacao = isset($_GET["solicitacao"])? $_GET["solicitacao"]:null;
      $prioridade = isset($_GET["prioridade"])? $_GET["prioridade"]:null;
      $orgao = isset($_GET["orgao"])? $_GET["orgao"]:null;
      $conexao = mysqli_connect('localhost', 'root', '', 'analistas');
      $query = "SELECT `solicitacao`,`prioridade`,`orgao`, `nome` from `analistas` WHERE `analistas`";
      if (mysqli_query($conexao, $query))
          { ?>
       
       
         <?php
      $conexao = mysqli_connect('localhost', 'root', '', 'analistas');
      if(mysqli_connect_errno($conexao)){
      echo 'Failed to connecto to database'.mysqli_connect_error();}

      $query= mysqli_query($conexao, "SELECT DISTINCT `solicitacao`, `prioridade`, `orgao` FROM ordem");
      ?>
                                  <?php while($rows = mysqli_fetch_array($query)): ?>
                                  <tr>
                                      <td><?php echo $rows['solicitacao']; ?></td>
                                      <td><?php echo $rows['prioridade']; ?></td>
                                      <td></td>
                                      <td></td>
                                      <td><?php echo $rows['orgao']; ?></td>
                                      <td></td>
                                      <td></td>
                                  </tr>
                                  <?php endwhile; ?>
       
       
       <!-- Modal -->
                          <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
                              <div class="modal-dialog" role="document">
                                  <div class="modal-content">
                                      <div class="modal-header">
                                          <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
                                          <h4 class="modal-title" id="myModalLabel"><strong>Solicitação</strong></h4>
                                      </div>
                                      <div class="modal-body">
                                          <div class="insertHere">
                                          </div>
                                      </div>
                                      <div class="modal-footer">
                                          <button type="button" class="btn btn-danger" data-dismiss="modal">Close</button>
                                          <button class="btn btn-success" data-dismiss="modal" value="Add Item" onClick="addRow('OrderTable')">Confirmar</button>
                                      </div>
                                  </div>
                              </div>
                          </div>
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.