首页 > 解决方案 > 在 Laravel 中将数组转换为对象

问题描述

我的控制器返回了以下数据:

[
  {
    "date": "2019-12-06",
    "weekday": "Friday",
    "users": 2
  },
  {
    "date": "2019-12-07",
    "weekday": "Saturday",
    "users": 1
  },
  {
    "date": "2019-12-08",
    "weekday": "Sunday",
    "users": 1
  },
  {
    "date": "2019-12-09",
    "weekday": "Monday",
    "users": 1
  },
  {
    "date": "2019-12-10",
    "weekday": "Tuesday",
    "users": 1
  },
  {
    "date": "2019-12-11",
    "weekday": "Wednesday",
    "users": 2
  }
]

我想返回这个:

{
    "Sunday": 1,
    "Monday": 1,
    "Tuesday": 1,
    "Wednesday": 2,
    "Thursday": 0,
    "Friday": 2,
    "Saturday": 1
}

对象中的数字是前一个数组中的“用户”,请问我该怎么做?

标签: laravellaravel-6

解决方案


你可以这样使用

$data = collect($data);
$result = $data->pluck('weekday', 'users');

然后随心所欲地订购

完整的解决方案

$data = '[
  {
    "date": "2019-12-06",
    "weekday": "Friday",
    "users": 2
  },
  {
    "date": "2019-12-07",
    "weekday": "Saturday",
    "users": 1
  },
  {
    "date": "2019-12-08",
    "weekday": "Sunday",
    "users": 1
  },
  {
    "date": "2019-12-09",
    "weekday": "Monday",
    "users": 1
  },
  {
    "date": "2019-12-10",
    "weekday": "Tuesday",
    "users": 1
  },
  {
    "date": "2019-12-11",
    "weekday": "Wednesday",
    "users": 2
  }
]';


$data = json_decode($data);
$data = collect($data);
$orders = [
    "Sunday",
    "Monday",
    "Tuesday",
    "Wednesday",
    "Thursday",
    "Friday",
    "Saturday"
];

$result = new stdClass();
foreach ($orders as $weekday) {
    $result->{$weekday} = $data->where('weekday', $weekday)->first()->users ?? 0;
}

dd($result);

结果是

在此处输入图像描述


推荐阅读