You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按相同category_id对permissions数组进行分组重组

解决方案:按权限分类重组数组

这是一个很常见的数组分组需求,我来给你提供两种实现方式,一种是原生PHP写法,另一种如果是在Laravel里的话可以用集合简化操作:

原生PHP实现

核心思路就是遍历原权限数组,以每个权限对应的分类名称作为新数组的键,把同分类的权限归集到对应的键下。

// 假设原数组是 $originalData(和你提供的结构一致)
$originalData = [
    'permissions' => [
        [
            "id" => 1,
            "name" => "UserIndex",
            "desc" => "查看所有用户",
            "category_id" => 1,
            "created_at" => null,
            "updated_at" => null,
            "pivot" => [],
            "category" => ["id" => 1, "name" => "用户"]
        ],
        [
            "id" => 2,
            "name" => "UserDelete",
            "desc" => "删除用户",
            "category_id" => 1,
            "created_at" => null,
            "updated_at" => null,
            "pivot" => [],
            "category" => ["id" => 1, "name" => "用户"]
        ],
        [
            "id" => 3,
            "name" => "UserInfo",
            "desc" => "查看用户",
            "category_id" => 1,
            "created_at" => null,
            "updated_at" => null,
            "pivot" => [],
            "category" => ["id" => 1, "name" => "用户"]
        ],
        [
            "id" => 4,
            "name" => "ActivityIndex",
            "desc" => "查看所有活动",
            "category_id" => 2,
            "created_at" => null,
            "updated_at" => null,
            "pivot" => [],
            "category" => ["id" => 2, "name" => "活动"]
        ]
    ]
];

// 初始化结果数组,匹配你需要的外层结构
$result = ['permission' => []];

// 遍历每个权限项进行分组
foreach ($originalData['permissions'] as $permission) {
    $categoryName = $permission['category']['name'];
    
    // 如果当前分类还没在结果数组中,先创建空数组容器
    if (!isset($result['permission'][$categoryName])) {
        $result['permission'][$categoryName] = [];
    }
    
    // 将当前权限添加到对应分类下
    $result['permission'][$categoryName][] = $permission;
}

// 输出查看结果
print_r($result);

运行这段代码后,就能得到你期望的结构:分类名称作为键,对应的值是该分类下的所有权限数组。

Laravel集合简化实现

如果你的项目基于Laravel框架,用集合的groupBy方法可以让代码更简洁优雅:

// 把原权限数组转成Laravel集合
$permissions = collect($originalData['permissions']);

// 按分类名称分组,并转成你需要的结构
$result = [
    'permission' => $permissions->groupBy(function ($item) {
        return $item['category']['name'];
    })->toArray()
];

// 输出结果
print_r($result);

集合的groupBy方法会自动完成分组逻辑,只需要通过回调指定分组依据(这里是分类名称),最后转成数组就能得到和原生写法完全一致的结果。

内容的提问来源于stack exchange,提问作者Phako

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 14:54:06