Группировка массива в объекте по метке времени созданного времени - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть данные JSON, которые возвращают комментарий пользователя:

[
  {
    "userId": 1,
    "id": 1,
    "title": "delectus aut autem",
    "completed": false,
    "created_at": "10/09/2018"
  },
  {
    "userId": 1,
    "id": 2,
    "title": "quis ut nam facilis et officia qui",
    "completed": false,
    "created_at": "10/09/2018"
  },
  {
    "userId": 1,
    "id": 3,
    "title": "fugiat veniam minus",
    "completed": false,
    "created_at": "15/09/2018"
  }]

Я бы хотел сгруппировать эти данные по свойству made_at в объекте с массивом.Я хочу, чтобы данные выглядели так, как если бы объект с массивом данных и там имели одинаковую дату create_at :

[
  {
    created_at: '10/09/2018',
    data: [
      {
        userId: 1,
        id: 1,
        title: 'delectus aut autem',
        completed: false,
        created_at: '10/09/2018'
      },
      {
        userId: 1,
        id: 2,
        title: 'quis ut nam facilis et officia qui',
        completed: false,
        created_at: '10/09/2018'
      }
    ]
  },
  {
    created_at: '15/09/2018',
    data: [
      {
        userId: 1,
        id: 3,
        title: 'fugiat veniam minus',
        completed: false,
        created_at: '15/09/2018'
      }
    ]
  }
]

Мой код группируется по имени столбца в массиве, ноне объект с массивом данных.Есть идеи?

$result = [];

foreach ($data as $item) {
    $column = $item[$by_column];
    unset($item[$by_column]);
    if (isset($result[$column])) {
        $result[$column][] = $item;
    } else {
        $result[$column] = array($item);
    }
}

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Вы можете использовать метод группировки коллекций laravel

$data->groupBy();
0 голосов
/ 19 сентября 2018

Вот если массив, который у вас есть.и вы можете выполнить ваши требования, используя вспомогательную функцию laravel collect.

$arr = [
  {
    "userId": 1,
    "id": 1,
    "title": "delectus aut autem",
    "completed": false,
    "created_at": "10/09/2018"
  },
  {
    "userId": 1,
    "id": 2,
    "title": "quis ut nam facilis et officia qui",
    "completed": false,
    "created_at": "10/09/2018"
  },
  {
    "userId": 1,
    "id": 3,
    "title": "fugiat veniam minus",
    "completed": false,
    "created_at": "15/09/2018"
  }
];

$jsonObj = collect($arr);
$groupedArray = $jsonObj->groupBy("created_at");

dd($groupedArray->toArray());

В приведенном выше примере вы можете преобразовать массив в коллекцию, а затем использовать группу сбора с помощью вспомогательной функции, тогда вы получите вывод, подобный этому

array(
  "10/09/2018" => [
    {
      "userId": 1,
      "id": 1,
      "title": "delectus aut autem",
      "completed": false,
      "created_at": "10/09/2018"
    },
    {
      "userId": 1,
      "id": 2,
      "title": "quis ut nam facilis et officia qui",
      "completed": false,
      "created_at": "10/09/2018"
    }
  ],
  "15/09/2018" => [
    {
      "userId": 1,
      "id": 3,
      "title": "fugiat veniam minus",
      "completed": false,
      "created_at": "15/09/2018"
    }
  ]
)

Я думаю, что это решит вашу проблему.

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