php
  • mysql
  • arrays
  • sorting
  • ranking
  • 2015-10-14 34 views 1 likes 
    1

    這是記分板的簡化的代碼。我想建立的是自動排序本身總分和分配的1等級的最低分數和增量從那裏,直到每個人都有一個等級排名最高的表。如果2人有相同的分數,那麼排名將是T,然後是數字。下面動態評分表

    <?php 
    $sql_score = $mysqli->query("SELECT * from event_scoreboard WHERE workoutid = '$work_out[$workout_counter]'"); 
        $rowcount1=mysqli_num_rows($sql_score);  
        $array = array(); 
        while($objscore = $sql_score->fetch_object()) { 
         $score = $objscore->score; 
    
         $total_score += $score * 3; 
        } 
    
        $values = array($total_score); 
        $ordered_values = $values; 
        echo rsort($ordered_values); 
    
        foreach ($values as $key => $value) { 
         foreach ($ordered_values as $ordered_key => $ordered_value) { 
          if ($value === $ordered_value) { 
           $key = $ordered_key; 
           break; 
          }       
         } 
         echo $value . '- Rank: ' . ((int) $key + 1) . '<br/>'; 
        } 
    ?> 
    

    測試代碼工作正常,但我們如何可以通過插入從而條件那些輸出到多陣列維離 實現相同的輸出。 $ values = array($ total_score);

    現在,我在下面得到這個輸出。它只顯示數組索引['0'],這就是爲什麼在所有輸出中Rank是1的原因。

    13087 - Rank: 1 
    11029 - Rank: 1 
    110359 - Rank: 1 
    17035 - Rank: 1 
    19702 - Rank: 1 
    1702 - Rank: 1 
    196 - Rank: 1 
    19 - Rank: 1 
    110266 - Rank: 1 
    

    工作實例顯示基於分數排名(目前DESC,但它需要在ASC順序 - 最低得分將是排名1#)

    $values = array(); 
    $values[0] = 13389; 
    $values[1] = 71298; 
    $values[2] = 234; 
    $values[3] = 9069; 
    $values[4] = 9936; 
    $values[5] = 2673; 
    $values[6] = 234; 
    $values[7] = 234; 
    $values[8] = 11634; 
    $values[9] = 1470; 
    
    $ordered_values = $values; 
        echo rsort($ordered_values); 
    
    foreach ($values as $key => $value) { 
        foreach ($ordered_values as $ordered_key => $ordered_value) { 
         if ($value === $ordered_value) { 
          $key = $ordered_key; 
          break; 
         }       
        } 
        echo $value . '- Rank: ' . ((int) $key + 1) . '<br/>'; 
    } 
    

    回答

    0

    的語法使用PHP的rsort()如下:

    bool rsort (array &$array [, int $sort_flags = SORT_REGULAR ]) 
    

    因此,執行線echo rsort($ordered_values)將評估爲true上succuss(如呼應1)或false失敗(呼應0)。

    如果您print_r()陣列$ordered_values,你會發現,這其實是在相反的順序進行排序:

    //the output I got 
    Array ([0] => 71298 [1] => 13389 [2] => 11634 [3] => 9936 [4] => 9069 [5] => 2673 [6] => 1470 [7] => 234 [8] => 234 [9] => 234) 
    

    含義是排名最低的數量來進行到底。

    注:我假設你實際上與你從代碼中得到的結果相反。不知道爲什麼你會不使用的rsort()sort()對面來實現你想要的結果。爲什麼需要多維數組的複雜性

    13389- Rank: 9 
    71298- Rank: 10 
    234- Rank: 1 
    9069- Rank: 6 
    9936- Rank: 7 
    2673- Rank: 5 
    234- Rank: 1 
    234- Rank: 1 
    11634- Rank: 8 
    1470- Rank: 4 
    
    +0

    這有一定道理,但之前,我可以解決這部分沒有任何人有我與多維數組遇到的問題有任何意見?它的一切都回歸一級。 – ocwebmaster

    +0

    您在我的答案中看到的輸出是帶有您的代碼的輸出,但將'rsort'更改爲'sort'除外。 –

    0

    我沒有看到:

    rsort()sort()更改將產生以下結果。爲什麼不在$ value數組上使用asort?這將按值從低到高對$ value數組進行排序,並保留關鍵關聯。

    相關問題