Algoritma - Bagaimana untuk melaksanakan kedudukan skor menggunakan PHP, sebarang idea yang bagus?
世界只因有你
世界只因有你 2017-05-16 13:16:24
0
5
1015

Buat penarafan markah pelajar

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

membalas semua (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那位不应该是第二名么

    左手右手慢动作

    题主想要的是按原数组顺序显示的排名(可并列)。大体思路是将原数组补充上位置信息,然后按照排序的结果反向构建排名数组。写出来比较啰嗦:

    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本身的数组排序函数?

        phpcn_u1582

        http://www.php.net/manual/zh/...
        自带的数据排序 应该可以解决你的问题

          我想大声告诉你

          先按分数给这个数组排序,然后将这个数组 revsert。然后按照分数取 key 就好了。

          另外:你的分数不写在数据库里,这样拿出来本来就是有顺序的啊

            Muat turun terkini
            Lagi>
            kesan web
            Kod sumber laman web
            Bahan laman web
            Templat hujung hadapan
            Tentang kita Penafian Sitemap
            Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!