I want to rank the keys of an associative array in php based upon their values. (top to down as 1, 2, 3....). Keys having same value will have same rank.
Here function
getRanks()is meant to return an array containingkeysand theranks(number).I expect it to return like this (this is sorted value wise in descending)
Array ( [b] => 1 [a] => 2 [d] => 3 [c] => 3 [e] => 4 )
There is issue in assigning the ranks (values) in the $ranks array which is to be returned.
What am I doing wrong? Do these loops even do something?
Code:
$test = array('a'=> 50, 'b'=>60, 'c'=>20, 'd'=>20, 'e'=>10);
$json = json_encode($test);
print_r(getRanks($json)); 
function getRanks($json) {
    $tmp_arr = json_decode($json, TRUE);
    $ranks = array();
    uasort($tmp_arr, function($a, $b){
        return $a == $b ? 0 : $a > $b ? -1 : 1; //descending
    });
    $keys = array_keys($tmp_arr); //after sorting
    $ranks = array_fill_keys($keys, 0); //copy keys
    $ranks[$keys[0]] = 1; //first val => rank 1
//------- WORKS FINE UNTIL HERE ------------------
    // need to fix the ranks assignment
    for($i=1; $i<count($keys)-1; $i++) {
        for($j=$i; $j < count($keys)-1; $j++) {
            if($tmp_arr[$keys[$j]] == $tmp_arr[$keys[$j+1]]) {
                $rank[$keys[$j]] = $i;
            }
        }
     }
    return $ranks;
}
 
    