Laravel 5.5中groupBy多字段分组未生成二维数组问题求助
解决Laravel Collection二维分组失效的问题
嘿,我懂你遇到的这个坑!你用groupBy('p_id','approve')的时候没得到预期的二维分组,是因为Laravel Collection的groupBy方法不支持直接传多个字段参数来实现嵌套分组——第二个参数其实是用来控制是否保留原集合键的$preserveKeys(默认是false),相当于你还是只按p_id分了组,第二个参数被当成布尔值处理了,自然出不来二维结构。
要实现先按p_id分组、再在每个组里按approve分组的二维结构,你需要把要分组的字段放进数组里传给groupBy,这才是Laravel Collection实现嵌套分组的正确姿势。
修正后的代码:
$result = DB::table('a16s_likes') ->select('id','p_id','approve','m_approve') ->get() // 获取Collection实例 ->groupBy(['p_id', 'approve']) // 用数组传递多个分组字段,实现嵌套分组 ->all(); // 转为普通数组 echo '<pre>'; print_r($result);
效果说明:
这样处理后,你会得到完全符合预期的二维分组结构:
- 第一层的键是
p_id的各个取值(比如75、74、73等) - 每个
p_id分组下,又会按approve的0/1值分成子组 - 最内层就是对应这两个条件的所有数据条目
进阶小技巧:
如果以后遇到更复杂的分组逻辑(比如不是直接用字段值,而是需要加工后再分组),还可以用闭包来自定义分组规则,效果和数组方式一致,比如:
// 闭包实现嵌套分组(适合复杂场景) ->groupBy(function ($item) { return [$item->p_id, $item->approve]; })
这样就能完美解决你的二维分组需求啦!
内容的提问来源于stack exchange,提问作者robspin
相关产品推荐
相关产品推荐

