как отсортировать объект JSON в Laravel - PullRequest
0 голосов
/ 21 мая 2018

У меня есть следующий ответ, как отсортировать его в зависимости от 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
      }
  ]
}

Я попробовал usort, но не смог.я также попробовал этот ответ здесь но он, кажется, отличается от того, который мне нужен

Ответы [ 3 ]

0 голосов
/ 21 мая 2018

Json в основном используется в качестве общего формата для отправки данных.

В Laravel вы можете легко преобразовать объект json в массив php с помощью json_decode ().

$phpArray = json_decode($json);

Fromздесь вы можете преобразовать его в коллекцию, чтобы воспользоваться функциями коллекции laravels.

$laravelArray = collect($phpArray);

После этого посмотрите на https://laravel.com/docs/5.5/collections, чтобы выполнить сортировку / фильтрацию или сделать все, что вы хотите с массивом..

0 голосов
/ 29 июля 2019

Как подсказал @hdifen, если вы используете Laravel, это будет просто.

$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;

Вывод:

{  
   "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
      }
   }
}
0 голосов
/ 21 мая 2018

В чистом 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...