国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

演算法 - 用PHP如何達成分數(shù)排名,有什麼好的想法?
世界只因有你
世界只因有你 2017-05-16 13:16:24
0
5
1287

對學生成績做一個排名,分數(shù)為一個數(shù)組,排好名次後輸出排名結(jié)果:
比如$scores = array(90,100,100); 自訂函數(shù)實現(xiàn)返回數(shù)組 $rank(3,1,1);

世界只因有你
世界只因有你

全部回覆(5)
過去多啦不再A夢

$arr = [99,100,100];
$arr1=$arr;
rsort($arr1);
$c=[];
 foreach ( $arr as $v){
     $b= array_search($v, $arr1);
     $c[]=$b+1;
 }
 print_r($c);

?>

這個能滿足你的需求,但是我有一個問題, 兩個並列第一,考99那位不應(yīng)該是第二名麼

左手右手慢動作

題主想要的是按原數(shù)組順序顯示的排名(可並列)。大體思路是將原始數(shù)組補充上位置信息,然後按照排序的結(jié)果反向構(gòu)建排名數(shù)組。寫出來比較囉嗦:

get_ranks(a[1:n])
  s ← array(n)
  ranks ← array(n)
  for i from 1 to n                 ? s[i] has record type
    s[i] ← {position: i, value: a[i], rank: 0}
  descending_sort(s by value)       ? sort by s[i].value
  s[1].rank ← 1
  for i from 2 to n
    if s[i].value < s[i-1].value    ? dense rank
      s[i].rank ← s[i-1].rank + 1
    else
      s[i].rank ← s[i-1].rank
  for i from 1 to n                 ? construct result
    ranks[s[i].position] ← s[i].rank
  return ranks[]
  

注意如果有多個並列第n,下一個將是第n+1名,這點與題主給出例子有點不同。整個演算法的複雜度瓶頸還是排序,即O(n lgn)。

Ty80

用php本身的陣列排序函數(shù)?

phpcn_u1582

http://www.php.net/manual/zh/...
自帶的資料排序 應(yīng)該可以解決你的問題

我想大聲告訴你

先依照分數(shù)為這個陣列排序,然後再將這個陣列 revsert。然後按照分數(shù)取 key 就好了。

另外:你的分數(shù)不寫在資料庫裡,這樣拿出來本來就是有順序的啊

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板