Maison > Questions et réponses > le corps du texte
Faites un classement des scores des élèves. Les scores sont un tableau Après le classement, affichez les résultats du classement :
Par exemple $scores = array(90,100,100)
; 自定义函数实现返回数组 $rank(3,1,1)
;
过去多啦不再A梦2017-05-16 13:18:24
<?php
$arr = [99,100,100];
$arr1=$arr;
rsort($arr1);
$c=[];
foreach ( $arr as $v){
$b= array_search($v, $arr1);
$c[]=$b+1;
}
print_r($c);
?>
Cela peut répondre à vos besoins, mais j'ai une question. Les deux sont à égalité pour la première place, celui qui a obtenu 99 à l'examen ne devrait-il pas être deuxième ?
ringa_lee2017-05-16 13:18:24
Ce que souhaite l'interrogateur, c'est afficher les classements dans l'ordre du tableau d'origine (peut être lié). L'idée générale est de compléter le tableau d'origine avec des informations de position, puis de construire à l'envers le tableau de classement en fonction des résultats triés. C'est un peu long à écrire :
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[]
Notez que s'il y a plusieurs nièmes personnes à égalité pour la nième place, la personne suivante sera la n+1ème personne, ce qui est un peu différent de l'exemple donné par la personne qui pose la question. Le goulot d'étranglement de complexité de l'ensemble de l'algorithme est le tri, qui est O(n lgn).
phpcn_u15822017-05-16 13:18:24
http://www.php.net/manual/zh/...
Le tri des données intégré devrait pouvoir résoudre votre problème
我想大声告诉你2017-05-16 13:18:24
Triez d'abord ce tableau par score, puis réinitialisez ce tableau. Ensuite, récupérez simplement la clé en fonction du score.
De plus : vos partitions ne sont pas inscrites dans la base de données, elles sont donc sorties dans l'ordre