Vadivel Murugan M Vadivel Murugan M - 4 months ago 19
PHP Question

Rank Calculation in PHP

I want to calculate the rank of the students. Condition for rank calculation is, If two or more students have same total marks they all will get same rank. Then the next rank will start from Previous_rank + Number of Duplicate records.

Here is my code:

<?php
$numbers = array( 101, 201, 301, 301, 401, 501, 501);
rsort($numbers);

$arrlength = count($numbers);
$rank = 1;
$rt=0;
for($x = 0; $x < $arrlength; $x++) {
if ($x==0) {
echo $numbers[$x]."- Rank".($rank);
}

elseif ($numbers[$x] != $numbers[($x-1)]) {

echo $numbers[$x]."- Rank".($rank);
$rt=$rank;
}
else{
echo $numbers[$x]."- Rank".($rt);
}
$rank++;
echo "<br>";
}
?>


My Expected output is like

501- Rank1
501- Rank1
401- Rank3
301- Rank4
301- Rank4
201- Rank6
101- Rank7

Answer

This code does what you want

        <?php
$numbers = array( 101, 201, 301, 301, 401, 401, 401, 501, 501, 501, 501);
rsort($numbers);

$arrlength = count($numbers);
$rank = 1;
$prev_rank = $rank;

for($x = 0; $x < $arrlength; $x++) {

    if ($x==0) {
         echo $numbers[$x]."- Rank".($rank);
    }

   elseif ($numbers[$x] != $numbers[$x-1]) {
        $rank++;
        $prev_rank = $rank;
        echo $numbers[$x]."- Rank".($rank);
   }

   else{
        $rank++;
        echo $numbers[$x]."- Rank".($prev_rank);
    }

   echo "<br>";
}
?>

The problem was with the $rt variable, which you set to 0 but instead should have tracked the previous rank.