Laravel Сортировать по данным в формате JSON - PullRequest
1 голос
/ 19 июня 2019

Допустим, у меня есть Модель, которая выводит 3 модели, которые являются этими данными:

[
    {
        "id": 1,
        "data": [
            {
                "id": "coins",
                "qty": 3
            },
            {
                "id": "ruby",
                "qty": 52
            }
        ]
    },
    {
        "id": 2,
        "data": [
            {
                "id": "coins",
                "qty": 140
            }
        ]
    },
    {
        "id": 3,
        "data": [
            {
                "id": "coins",
                "qty": 84
            }
        ]
    }
]

Как бы мне, используя Коллекции, отсортировать эти данные по coins qty и у кого больше всего.

Ответы [ 4 ]

1 голос
/ 19 июня 2019

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

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

$phpArray = json_decode($json);

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

$laravelArray = collect($phpArray);

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

Или вы можете использовать чистый php для решения этой проблемы.

$json Ваш JSON восстановлен

$array = json_decode($json, true);
usort($array['data'], function($a, $b) {
    return $a['qty'] <=> $b['qty'];
});

print_r($array);
0 голосов
/ 19 июня 2019

попробуйте это $ array = collect ($ array) -> sortBy ('data.qty') -> reverse () -> toArray ();

0 голосов
/ 19 июня 2019

Хороший чистый способ сделать это с помощью "." оператор.

$projects = Project::all()->load('tasks')->sortBy('data.qty');

0 голосов
/ 19 июня 2019

См. Пример кода

<?php

    $json = '{
    "Message": "Done.",
    "Status": true,
    "InnerData": [
  {
     "id": 66,
     "name": "first",
     "distance": 74
  },
  {
     "id": 67,
     "name": "second",
     "distance": 153
  },
  {
     "id": 68,
     "name": "third",
     "distance": 172
  }
]
}';
$array = json_decode($json, true);
usort($array['InnerData'], function($a, $b) {
   return $a['distance'] <=> $b['distance'];
});

print_r($array);

Надеюсь, это вам поможет.

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...