1

i have an array like this

[{"id"="1","rating"=>[{"rating"=>"1"}]},{"id"="2","rating"=>[{"rating"=>"2"}]},{"id"=>"3","rating"=>[{"rating"=>"3"}]}]

here i need sort key based "rating" i need to expect output is

[{"id"="3","rating"=>[{"rating"=>"3"}]},{"id"="2","rating"=>[{"rating"=>"2"}]},{"id"=>"1","rating"=>[{"rating"=>"1"}]}] 

can any one please guide how can i get this

Thanks for advance.

hakre
  • 193,403
  • 52
  • 435
  • 836
Ajay
  • 370
  • 3
  • 6
  • 17

4 Answers4

2

if you want to keep keys:

uasort($data, function($a, $b){ return ($a->rating > $b->rating); });

if you don't

usort($data, function($a, $b){ return ($a->rating > $b->rating); });
Vytautas
  • 3,509
  • 1
  • 27
  • 43
2
function aasort (&$array, $key) {
    $sorter=array();
    $ret=array();
    reset($array);
    foreach ($array as $ii => $va) {
        $sorter[$ii]=$va[$key];
    }
    asort($sorter);
    foreach ($sorter as $ii => $va) {
        $ret[$ii]=$array[$ii];
    }
    $array=$ret;
}

aasort($your_array,"rating");

Source: Sort Multi-dimensional Array by Value

Community
  • 1
  • 1
Habib
  • 219,104
  • 29
  • 407
  • 436
0

yuo can use php function usort.

You should provide your function to implement you sort critiria. For example

 function your_sort($a, $b)
 {
     return $b['rating'] - $a['rating'];
 }

 your_sort($array, "cmp");
ab_dev86
  • 1,952
  • 16
  • 21
0

Take care that the items of the array seems to be objects, and that the "rating" property is a string that should probably be converted into numeric.

function f_my_sort($a, $b) {
  if ($a->id==$b->id) return 0;
  return ( intval($a->rating) < intval($b->rating) ) ? -1 : 1;
}

usort($my_array, "f_my_sort");
Skrol29
  • 5,402
  • 1
  • 20
  • 25