2017-01-19 1 views
1

Ich brauche ein Ranking-System, und das ist, was ich habe.Bugs in Ranking-Array in PHP

<?php 
$arr=array(10,11,4,2,10,3); 
$rank = $arr; 
rsort($rank); 
foreach($arr as $sort) {        
    echo $sort.' is ranking '.(array_search($sort, $rank) + 1).'<br>'; 
} 
?> 

Das Ergebnis was ich habe ist

10 is ranking 2 
11 is ranking 1 
4 is ranking 4 
2 is ranking 6 
10 is ranking 2 
3 is ranking 5 

Das Problem ist, wenn ich zwei Einträge mit den gleichen Werten den nächsten Rang übersprungen. Das Ergebnis, das ich oben bekommen habe, zeigt zweimal '10 ist Rang 2 '. Aber dann übersprang es auf Rang 4.

Ich brauche es so zu sein.

10 is ranking 2 
11 is ranking 1 
4 is ranking 3 
2 is ranking 5 
10 is ranking 2 
3 is ranking 4 

Hilf mir bitte. Vielen Dank.

+1

oder wenn Sie möchten, um die Nummer schließen es wiederholt Sie dieses tun können ' '; \t $ rank [$ index] = 'X'; // Das zeigt zu deinem Programm bereits \t \t // verglichen diese Position } ' – iwaduarte

+0

@iwaduarte ich sehe. Danke. <3 –

Antwort

2

Das ist richtig.

Da Sie 10 mehrfach haben, wird rsort es mehrfach abbilden.
Wenn Sie es auf Ihre Weise tun möchten, kann die ursprüngliche Eingabe nicht mehrmals die gleiche Eingabe haben.

Mit array_unique können Sie dies lösen, so dass Sie immer einen einzigartigen Eingang haben werden.

Zum Beispiel

$arr=array(10,11,4,2,10,3); 
$rank = array_unique($arr); //This line have I changed 
rsort($rank); 
foreach($arr as $sort) {        
    echo $sort.' is ranking '.(array_search($sort, $rank) + 1).'<br>'; 
} 
+1

Sie sparen mich .. ich muss wirklich mehr über Array lernen. Vielen Dank <3 –

1
<?php 
$arr=array(10,11,4,2,10,3); 
$rank = $arr; 
rsort($rank); 

foreach($arr as $sort) { 
    if($sort <= 4){ 
     echo $sort.' is ranking '.(array_search($sort, $rank)).'<br>'; 
    }else{ 
     echo $sort.' is ranking '.(array_search($sort, $rank) + 1).'<br>'; 
    } 
} 
?> 
Verwandte Themen