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
  • 184,866
  • 48
  • 414
  • 792
Ajay
  • 360
  • 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,499
  • 1
  • 26
  • 42
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
  • 212,447
  • 27
  • 392
  • 421
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,892
  • 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,192
  • 1
  • 19
  • 25