Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在Laravel5.4中对Json输出进行分组?_Php_Json_Laravel_Laravel 5.4 - Fatal编程技术网

Php 如何在Laravel5.4中对Json输出进行分组?

Php 如何在Laravel5.4中对Json输出进行分组?,php,json,laravel,laravel-5.4,Php,Json,Laravel,Laravel 5.4,是否可以对来自laravel的JSON输出进行分组/重新排列?我想在它被系统发送到视图之前对它进行分组,所以我需要在服务器端而不是客户端完成 我们假设JSON的结构如下: id、姓名、日期 或者在示例中,是这样的: [[ {"id" : "1", "name" : "A", "date" : "2017-01-01"}, {"id" : "2", "name" : "B", "date" : "2017-01-01"}, {"id" : "3", "name" : "C", "date" : "

是否可以对来自laravel的JSON输出进行分组/重新排列?我想在它被系统发送到视图之前对它进行分组,所以我需要在服务器端而不是客户端完成

我们假设JSON的结构如下:

id、姓名、日期

或者在示例中,是这样的:

[[
{"id" : "1", "name" : "A", "date" : "2017-01-01"},
{"id" : "2", "name" : "B", "date" : "2017-01-01"},
{"id" : "3", "name" : "C", "date" : "2017-01-01"},
{"id" : "4", "name" : "D", "date" : "2018-01-01"},
{"id" : "5", "name" : "E", "date" : "2018-01-01"},
]]
有没有可能把它分组成这样的东西

[
    {"2017-01-01":[
        {"id":"1","name":"A"},
        {"id":"2","name":"B"},
        {"id":"3","name":"C"}
    ]},
    {"2018-01-01":[
        {"id":"4","name":"D"},
        {"id":"5","name":"E"},
    ]},
]
(如果您需要查看我的JSON控制器)这是我的JSON控制器:

public function harga($id)
{
  $harga = harga::whereHas('produk', function ($query) use($id) {
    $query->where('id',$id);
  })->get();
  return response()->json([$harga],200);
}

谢谢

在查询中使用groupBy:

public function harga($id)
{
  $harga = harga::whereHas('produk', function ($query) use($id) {
    $query->where('id',$id);
  })->get()->groupBy(column_name_you_want_to_group_by);
  return response()->json([$harga],200);
}

您可以使用
groupBy
方法执行此操作:

return response()->json($harga->groupBy('date'), 200);

在控制器中,可以按如下方式进行操作

 js = "your json";
 $jsArray = json_decode($js, true);
    $jsArray = $jsArray[0];
    $newJsArr = [];
    foreach ($jsArray as $j) {
        $newJsArr[$j['date']][] = ["id" => $j['id'], "name" => $j['name']];
    }
    $newJsArr = json_encode([$newJsArr]);

谢谢,它的工作,我不知道它将是那么容易在拉雷维尔。也感谢您将其写入我的控制器代码中。:)对于我来说,在get()之后使用groupBy,就像您那样。(使用before是抛出错误)答案很好,这是一个正确的答案,但很抱歉,我不能让你的答案成为最有用的答案,因为有人已经在同一时间回答了比你更完整的答案。无论如何,非常感谢你的帮助!