[Collection] 请教主帮忙优化

有所有字段信息的数据,需要重新组织出表和字段的关系,并且字段是按照要求排序的。

原始数据中

“table_name”:字段所属表
“field_name“ : 字段名
“field_col_num":字段排序号

期待输出的结果是

{
    "table_name" : [
        "field_name",
        "field_name",        
        ....
    ]
}

测试数据如下:

原始数据:

[
{
"table_name": "dp",
"field_name": "dpcryptfeat",
"field_col_num": "6"
},
{
"table_name": "dp",
"field_name": "dppath",
"field_col_num": "4"
},
{
"table_name": "dp",
"field_name": "dpauthfeat",
"field_col_num": "5"
},
{
"table_name": "dp",
"field_name": "dpnick",
"field_col_num": "3"
},
{
"table_name": "icc",
"field_name": "iccbufsizeprot",
"field_col_num": "13"
},
{
"table_name": "icc",
"field_name": "iccmech",
"field_col_num": "5"
},
{
"table_name": "icc",
"field_name": "iccnick",
"field_col_num": "3"
},
{
"table_name": "icc",
"field_name": "iccprocmanager",
"field_col_num": "8"
},
{
"table_name": "icc",
"field_name": "iccdesc",
"field_col_num": "4"
},
{
"table_name": "icc",
"field_name": "iccprot",
"field_col_num": "6"
},
{
"table_name": "icc",
"field_name": "iccformatprot",
"field_col_num": "14"
}
]

输出结果:

{
"dp": [
"dpnick",
"dppath",
"dpauthfeat",
"dpcryptfeat"
],
"icc": [
"iccnick",
"iccdesc",
"iccmech",
"iccprot",
"iccprocmanager",
"iccbufsizeprot",
"iccformatprot"
]
}
sodasix
$处理后数据 = [];
foreach ($原始数据 as $key => $value) {
	$处理后数据[$value['table_name']] = [
		$value['field_name'],
	];
}
sunnirvana 回复 sodasix

这样的话,field没有排序

JellyBool

好的,我现在去试试,有结果就放上来
==再次编辑,加一下答案
有真相:

daimingkang 回复 JellyBool

想知道 这个网站是你用laravel写的吗?

JellyBool 回复 daimingkang

恩,是的。基于 Laravel 5.1 LTS

daimingkang 回复 JellyBool

看了你视频!讲的不错!

daimingkang 回复 JellyBool

你大概用了多长时间建这个站

JellyBool 回复 daimingkang

这个,只算最初的第一版上线,差不多一周。当然,上线完了,维护和改善的时间会更多,比如这个新的评论系统,我前天就花了一天的时间。。。。

perfectboook
$input = '[ { "table_name": "dp", "field_name": "dpcryptfeat", "field_col_num": "6" }, { "table_name": "dp", "field_name": "dppath", "field_col_num": "4" }, { "table_name": "dp", "field_name": "dpauthfeat", "field_col_num": "5" }, { "table_name": "dp", "field_name": "dpnick", "field_col_num": "3" }, { "table_name": "icc", "field_name": "iccbufsizeprot", "field_col_num": "13" }, { "table_name": "icc", "field_name": "iccmech", "field_col_num": "5" }, { "table_name": "icc", "field_name": "iccnick", "field_col_num": "3" }, { "table_name": "icc", "field_name": "iccprocmanager", "field_col_num": "8" }, { "table_name": "icc", "field_name": "iccdesc", "field_col_num": "4" }, { "table_name": "icc", "field_name": "iccprot", "field_col_num": "6" }, { "table_name": "icc", "field_name": "iccformatprot", "field_col_num": "14" } ]';

dd(collect(json_decode($input))->groupBy('table_name')->map(function($item){
    return collect($item)->sortBy('field_col_num')->map(function($data) {
        return $data->field_name;
    })->values();
})->toJson());

哈哈,忍不住试也下。。

JellyBool 回复 perfectboook

不错不错,哈哈哈

JellyBool
collect($groups)->sortBy('field_col_num')->groupBy('table_name')->map(function ($group) {
      return $group->pluck('field_name');
});

这样符合要求么

perfectboook 回复 JellyBool

不错,还是教主厉害!哈哈

JellyBool 回复 perfectboook

哈哈哈,过奖过奖,都是互相学习嘛,反正比较欣赏你的态度。。。我写代码去了

sunnirvana

二位真的太厉害了!

JellyBool 回复 sunnirvana

后面再有这样的需求,可以直接在社区发帖,就像这样描述好需求,给好原始数据和输出的要求,我进来对这方面很感兴趣,哈哈哈