gilm501
gilm501

Reputation: 191

PHP sort JSON from highest to lowest

I have the following json:

     {
    "ID":"4",
    "name":"Gil",
    "likes":0,
    "Dec":"A Man"
    },
    {
   "ID":"3",
    "name":"Yoni",
    "likes":3,
    "Dec":"A child"
    },
    {
    "ID":"6",
    "name":"Roni",
    "likes":1,
    "Dec":"A woman"
    }

And I would like to rearange it based on the likes from heighst to lowest so the result will be :

{
        "ID":"5",
        "name":"Roni",
        "likes":6,
        "Dec":"A woman"
        } ,  
   {
       "ID":"3",
        "name":"Yoni",
        "likes":3,
        "Dec":"A child"
        },

 {
        "ID":"4",
        "name":"Gil",
        "likes":0,
        "Dec":"A Man"
        }

How can I rearange it in php ?

Upvotes: 0

Views: 692

Answers (2)

Steve
Steve

Reputation: 20469

json_decode / json_encode and usort:

$array = json_decode($json_string, TRUE);

usort($array, function($a, $b) {
    return $a['likes'] - $b['likes'];
});

echo json_encode($array, JSON_PRETTY_PRINT);

Demo

Upvotes: 5

dave
dave

Reputation: 64657

$json = '[{
  "ID":"4",
  "name":"Gil",
  "likes":0,
  "Dec":"A Man"
},
{
  "ID":"3",
  "name":"Yoni",
  "likes":3,
  "Dec":"A child"
},
{
  "ID":"6",
  "name":"Roni",
  "likes":1,
  "Dec":"A woman"
}]';

$json_arr = json_decode($json, true);
usort(
  $json_arr, 
  function($a, $b) { 
    if ($a['likes'] == $b['likes']) {
      return 0;
    }
    return ($a['likes'] > $b['likes']) ? -1 : 1;
});
$json = json_encode($json_arr);

Upvotes: 1

Related Questions