Rami
Rami

Reputation: 171

how to sort a json object in laravel

i have the following response, how to sort it depending on the distnace

{
  "Message": "Done.",
  "Status": true,
  "InnerData": [
      {
         "id": 66,
         "name": "tito",
         "distance": 74,
      },
      {
         "id": 67,
         "name": "liver pool",
         "distance": 83
      },
      {
         "id": 67,
         "name": "Text",
         "distance": 72
      }
  ]
}

i tried the usort but i didn't make it. i also tried this answer here but it seems to be different than the one i need

Upvotes: 2

Views: 10033

Answers (3)

Steve Bauman
Steve Bauman

Reputation: 8688

As @hdifen suggested, if you're using Laravel it's a breeze to do this.

$json = '{
  "Message": "Done.",
  "Status": true,
  "InnerData": [
      {
         "id": 66,
         "name": "tito",
         "distance": 74
      },
      {
         "id": 67,
         "name": "liver pool",
         "distance": 83
      },
      {
         "id": 67,
         "name": "Text",
         "distance": 72
      }
  ]
}';

$data = json_decode($json, true);

$data['InnerData'] = collect($data['InnerData'])->sortBy('distance', SORT_REGULAR, true);

$encoded = json_encode($data);

echo $encoded;

Output:

{  
   "Message":"Done.",
   "Status":true,
   "InnerData":{  
      "1":{  
         "id":67,
         "name":"liver pool",
         "distance":83
      },
      "0":{  
         "id":66,
         "name":"tito",
         "distance":74
      },
      "2":{  
         "id":67,
         "name":"Text",
         "distance":72
      }
   }
}

Upvotes: 3

Tom Headifen
Tom Headifen

Reputation: 1996

Json is mainly used as a common format for sending data.

In Laravel you can convert a json object to a php array easily by using json_decode().

$phpArray = json_decode($json);

From here you can convert it to a collection to take advantage of laravels collection functions.

$laravelArray = collect($phpArray);

After this take a look at https://laravel.com/docs/5.5/collections to do sort/filter or do whatever you want to the array.

Upvotes: 0

Pyton
Pyton

Reputation: 1319

In pure PHP 7

<?php

$json = '{
  "Message": "Done.",
  "Status": true,
  "InnerData": [
      {
         "id": 66,
         "name": "tito",
         "distance": 74
      },
      {
         "id": 67,
         "name": "liver pool",
         "distance": 83
      },
      {
         "id": 67,
         "name": "Text",
         "distance": 72
      }
  ]
}';
$array = json_decode($json, true);
usort($array['InnerData'], function($a, $b) {
    return $a['distance'] <=> $b['distance'];
});

print_r($array);

Upvotes: 4

Related Questions