Php Laravel:将分组数据转换为一行

Php Laravel:将分组数据转换为一行,php,sql,laravel,eloquent,group-by,Php,Sql,Laravel,Eloquent,Group By,您好,我想将具有重复键和不同值的分组数据转换为一行。 例如: "book1" { { "id" : "1", "group" : "book1", "name" : "Book X", "buy" : "null", "test" : "null", } , { "id" : "1", "group" : "book1", "name"

您好,我想将具有重复键和不同值的分组数据转换为一行。 例如:

    "book1" {
    {
        "id" : "1",
        "group" : "book1",
        "name" : "Book X",
        "buy" : "null",
        "test" : "null",
    } ,
    {
        "id" : "1",
        "group" : "book1",
        "name" : "null",
        "buy" : "100",
        "test" : "null",
    } ,
    {
        "id" : "1",
        "group" : "book1",
        "name" : "null",
        "buy" : "null",
        "test" : "344",
    }
 },
    "book2" {
 {
        "id" : "1",
        "group" : "book2",
        "name" : "Book Y",
        "buy" : "null",
        "test" : "null",
    }
    ....
 } 
    ...
我要做的是将所有这些具有公共键的数组转换为数据库中的一个数组或一行,其中的数据按组字段分组,如示例所示 我想做的是:

{
  "id" : "1",
  "group" : "book1",
  "name" : "Book X",
  "buy" : "100",
  "test" : "344",
}
请通过php代码(laravel模型)或SQL查询帮助修复,非常感谢

试试这个

 $data = []; // your data
    $response = [];
    foreach($data as $key => $d){
       if($d['id'] != null) $response[$key]['id'] = $d['id'];
       if($d['group'] != null) $response[$key]['group'] = $d['group'];
       if($d['name'] != null) $response[$key]['name'] = $d['name'];
       if($d['buy'] != null) $response[$key]['buy'] = $d['buy'];
       if($d['test'] != null) $response[$key]['test'] = $d['test'];

    }
已编辑

您必须使用
fonull,因此请使用下面的方法

$response = [];
        foreach($data as $key => $d){
           if($d['id'] != "null") $response[$d['group']]['id'] = $d['id'];
           if($d['group'] != "null") $response[$d['group']]['group'] = $d['group'];
           if($d['name'] != "null") $response[$d['group']]['name'] = $d['name'];
           if($d['buy'] != "null") $response[$d['group']]['buy'] = $d['buy'];
           if($d['test'] != "null") $response[$d['group']]['test'] = $d['test'];

        }
编辑2

$response = [];
            foreach($data as $key => $row){
                $array = [];
               foreach($row as $d){
                if($d['id'] != null) $array['id'] = $d['id'];
                if($d['group'] != null) $array['group'] = $d['group'];
                if($d['name'] != null) $array['name'] = $d['name'];
                if($d['buy'] != null) $array['buy'] = $d['buy'];
                if($d['test'] != null) $array['test'] = $d['test'];
               }
              $response[$key][] = $array;
            }

    dd($response);
使用groupBy()


你是如何得到这些数据的?从查询?
book1
中有3行吗?是,每个数组有3个字段每次都会更改,但此字段中只有一个不为空。否,不起作用。结果不包括或显示我编辑的3个字段(名称、购买和测试)检查答案,您已将
'
设置为
null
检查正确的条件和不同的方式我编辑了示例,您可以重新检查吗?是的,非常感谢,我将null改为空()我曾经用空字段显示多个数组我想要的是合并这些数组或用1个数组替换它,忽略了空字段,如示例我更新了上面的答案请检查并使用groupBy和test
$data = App\ModelName::groupBy('test')->get();