0

I want to sort a php array whose key value combination is dynamic thus making it difficult to define a function and apply usort() Here is the array

Array ( 
    [0] => Array ( [PAYE] => 43 ) 
    [1] => Array ( [VAT] => 2 ) 
    [2] => Array ( [NHIF] => 1 ) 
    [3] => Array ( [NSSF] => 2 ) 
    [4] => Array ( [MPESA] => 1 ) 
    [5] => Array ( [EQUITEL] => 1 ) 
    [6] => Array ( [AIRTEL] => 1 ) 
    [7] => Array ( [CER] => 2 ) 
    [8] => Array ( [BDD] => 4 ) 
    [9] => Array ( [BMI] => 1 ) 
    [10] => Array ( [TG] => 7 ) 
    [11] => Array ( [BT] => 3 ) 
    [12] => Array ( [EPL] => 4 ) 
    [13] => Array ( [KPL] => 8 ) 
) 

I want to sort the array using the right most value. The result should be

Array ( 
    [0] => Array ( [PAYE] => 43 ) 
    [13] => Array ( [KPL] => 8 )
    [10] => Array ( [TG] => 7 ) 
    [8] => Array ( [BDD] => 4 ) 
    [12] => Array ( [EPL] => 4 )
    [11] => Array ( [BT] => 3 )
    [7] => Array ( [CER] => 2 ) 
    [3] => Array ( [NSSF] => 2 ) 
    [1] => Array ( [VAT] => 2 )
    [3] => Array ( [NSSF] => 2 ) 
    [6] => Array ( [AIRTEL] => 1 ) 
    [9] => Array ( [BMI] => 1 ) 
    [4] => Array ( [MPESA] => 1 ) 
    [2] => Array ( [NHIF] => 1 ) 
)

How should I go about it?

Jack Zollo
  • 13
  • 3

2 Answers2

1

use uasort function to save keys and array_shift to take values to compare

uasort($array, function($i1, $i2) {  
                  return array_shift($i2) - array_shift($i1); });

print_r($array);
splash58
  • 26,043
  • 3
  • 22
  • 34
1

uasort and current functions will do the job:

// $arr is your initial array
uasort($arr, function($a, $b){   // will maintain index association
    return current($b) - current($a);
});

http://php.net/manual/en/function.current.php

RomanPerekhrest
  • 88,541
  • 4
  • 65
  • 105