2017-01-19 5 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>'; 
} 
?> 

私が得た結果は、私が同じ値を持つ2つのエントリを持っている場合、それは次のランクをスキップし、問題がある

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

です。私が上に上げた結果、「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

場合、またはそれはあなたがこの '<?phpの $編曲=配列(10,11,4,2,10、同様に行うことができます繰り返した数を含めます3)。 $ rank = $ arr; rsort($ rank); foreach($ arr $ sort){ \t \t $ index = array_search($ sort、$ rank); \t echo $ sort。 ' ($ index + 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>'; 
    } 
} 
?>