2017-01-19 4 views
1

Мне нужна система ранжирования, и это то, что у меня есть.Ошибки в рейтинге массива в 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>'; 
} 
?> 

В результате я получил это

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

Проблема заключается в том, когда у меня есть 2 записей с одинаковыми значениями он пропустил следующий ранг. Результат, который я получил выше, показывает, что «10 занимает 2-е место». Но затем он перешел на ранг 4.

Мне нужно, чтобы это было так.

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

Помогите мне пожалуйста. Спасибо.

+1

или, если хотите, чтобы включить номер он был повторен вы можете сделать, как этот ' '; \t $ rank [$ index] = 'X'; // Это указывает на вашу программу, которую вы уже сделали \t \t // сравнил эту позицию } ' – iwaduarte

+0

@iwaduarte я вижу. Спасибо. <3 –

ответ

2

Это правильно.

Потому что у вас есть 10 несколько раз, rsort будет отображать его несколько раз.
Если вы хотите сделать это по-своему, исходный вход не может иметь несколько раз один и тот же вход.

С array_unique вы можете решить эту проблему, поэтому у вас всегда будет уникальный вход.

Например

$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

вы меня спасе ... мне действительно нужно узнать больше о массиве. большое спасибо <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>'; 
    } 
} 
?> 

 Смежные вопросы

  • Нет связанных вопросов^_^