Arrays 按给定键对Laravel集合进行分组
在Laravel中,如果同一用户数组有多个响应,我想更改响应 我用这个函数得到一个响应 controller.phpArrays 按给定键对Laravel集合进行分组,arrays,api,laravel-5,Arrays,Api,Laravel 5,在Laravel中,如果同一用户数组有多个响应,我想更改响应 我用这个函数得到一个响应 controller.php public function index(){ $reports = Report::all(); return $this->sendResponse($reports->toArray(), 'User Reports successfully.'); } 这是我的回答 { "success": true, "data": [
public function index(){
$reports = Report::all();
return $this->sendResponse($reports->toArray(), 'User Reports successfully.');
}
这是我的回答
{
"success": true,
"data": [
{
"id": 66,
"cuid": 20,
"name": "my1",
"created_at": "2018-03-09 00:00:00",
"updated_at": "2018-03-09 00:00:00",
"time": "07:19 PM",
"status": "D"
},
{
"id": 65,
"cuid": 20,
"name": "my1",
"created_at": "2018-03-07 00:00:00",
"updated_at": "2018-03-07 00:00:00",
"time": "07:39 PM",
"status": "D"
},
{
"id": 64,
"cuid": 21,
"name": "my2",
"created_at": "2018-03-02 00:00:00",
"updated_at": "2018-03-05 00:00:00",
"time": "07:01 PM",
"status": "D"
},
{
"id": 63,
"cuid": 20,
"name": "my2",
"created_at": "2018-03-02 00:00:00",
"updated_at": "2018-03-02 00:00:00",
"time": "06:44 PM",
"status": "D"
}
],
"message": "User Reportsssss successfully."
}
这很好,我的问题是我有4个数组,其中有2个用户,显示我想这样显示的方式
{
"success": true,
"data": [
my1:{
{
"id": 66,
"cuid": 20,
"name": "my1",
"created_at": "2018-03-09 00:00:00",
"updated_at": "2018-03-09 00:00:00",
"time": "07:19 PM",
"status": "D"
}
{
"id": 65,
"cuid": 20,
"name": "my1",
"created_at": "2018-03-07 00:00:00",
"updated_at": "2018-03-07 00:00:00",
"time": "07:39 PM",
"status": "D"
}
},
my2:{
{
"id": 63,
"cuid": 21,
"name": "my2",
"created_at": "2018-03-07 00:00:00",
"updated_at": "2018-03-07 00:00:00",
"time": "07:39 PM",
"status": "D"
}
{
"id": 64,
"cuid": 21,
"name": "my2",
"created_at": "2018-03-02 00:00:00",
"updated_at": "2018-03-05 00:00:00",
"time": "07:01 PM",
"status": "D"
}
}
],
"message": "User Reportsssss successfully."
}
如果同一用户使用单个数组,如何实现这一点您需要循环查看结果并根据您的要求进行修改。我已经测试了下面的代码,它工作正常。尝试使用它
$reports = $reports->toArray();
$finalArray = [];
foreach($reports as $key=>$value) {
$name = $value['name'];
$finalArray[$name][] = $value;
}
return $this->sendResponse($finalArray, 'User Reports successfully.');
谢谢。理想的方法是使用收集管道。您最初的控制器方法将变为:
public function index(){
$reports = Report::all();
return $this->sendResponse($reports->groupBy('name')->toArray(), 'User Reports successfully.');
}
groupBy
方法将集合结果拆分为其他集合,并按提供的列进行分组。由于toArray()
方法级联,您将得到一个很好的数组。这是一种非常冗长的方法。请在@ollieread中显示更好的方法。如果你有更好的方法,你可以降级我的答案,如果你没有更好的方法,你无权降级我的答案。看看下面我的答案。它不会输出预期的结果。你能打印出你的代码输出吗?这不应该是公认的答案@ollieread的解决方案是处理Laravel集合的更好方法。