按数组公共键分组:针对给定$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
相关产品推荐
相关产品推荐

