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

按数组公共键分组:针对给定$sortMod数组的技术处理咨询

专家解答

Hey there! 针对你这个按共同数组键分组的需求,我推荐用PHP循环结合数组操作的方式来实现,逻辑直观还能兼容数组字段缺失的情况,代码如下:

$groupedResult = [];

foreach ($sortMod as $moduleItem) {
    $currentGroupId = $moduleItem['group_id'];
    
    // 初始化分组结构,仅在分组不存在时创建
    if (!isset($groupedResult[$currentGroupId])) {
        $groupedResult[$currentGroupId] = [
            'group_id' => $currentGroupId,
            'group_name' => $moduleItem['group_name'] ?? '', // 处理group_name缺失的情况
            'modules' => []
        ];
    }
    
    // 提取模块专属数据,剔除分组相关的键
    $pureModuleData = array_filter($moduleItem, function($key) {
        return !in_array($key, ['group_id', 'group_name']);
    }, ARRAY_FILTER_USE_KEY);
    
    // 将模块添加到对应分组的列表中
    $groupedResult[$currentGroupId]['modules'][] = $pureModuleData;
}

// 可选:将关联数组转为索引数组,方便后续遍历
$groupedResult = array_values($groupedResult);

// 打印结果查看
print_r($groupedResult);

关键细节说明:

  • 字段兼容处理:用??运算符(PHP7.0+支持)处理group_name缺失的情况,自动填充为空字符串;如果你的PHP版本较低,可以替换成isset($moduleItem['group_name']) ? $moduleItem['group_name'] : ''。
  • 数据纯净性:通过array_filter剔除group_id和group_name,确保分组内的modules列表只保留模块相关的字段,避免冗余数据。
  • 结构灵活性:最终结果默认是按group_id作为键的关联数组,若需要索引数组,执行array_values转换即可。

示例输出结果:

Array
(
    [0] => Array
        (
            [group_id] => 1
            [group_name] => Home
            [modules] => Array
                (
                    [0] => Array
                        (
                            [module_id] => 1
                            [mod_name] => Home
                            [mod_link] => /home
                            [var_name] => home
                        )
                )
        )
    [1] => Array
        (
            [group_id] => 2
            [group_name] => 
            [modules] => Array
                (
                    [0] => Array
                        (
                            [module_id] => 2
                            [mod_name] => Numbers
                            [mod_link] => /number_mapping
                            [var_name] => numbermap
                        )
                    [1] => Array
                        (
                            [module_id] => 70
                            [mod_name] => DR Plan
                            [mod_link] => /dr_plan
                            [var_name] => dr_plan
                        )
                )
        )
    [2] => Array
        (
            [group_id] => 3
            [group_name] => 
            [modules] => Array
                (
                    [0] => Array
                        (
                            [module_id] => 8
                            [mod_name] => Reporting
                            [...] => 
                        )
                )
        )
)

如果还有其他特殊需求,比如自定义group_name的默认值、调整模块字段的筛选规则,随时告诉我哦!


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:50:09