Arrays 按给定键对Laravel集合进行分组

Arrays 按给定键对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": [

在Laravel中,如果同一用户数组有多个响应,我想更改响应

我用这个函数得到一个响应

controller.php

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集合的更好方法。