PHP 多维数组中按唯一 ID 生成从 0 开始的连续序号
本文介绍如何将多维数组中重复出现的range值(如336、390)统一映射为从0开始的紧凑整数序列(如336→0,390→1),保持同ID元素序号一致,适用于分组标识、前端索引优化等场景。

本文介绍如何将多维数组中重复出现的 range 值(如 336、390)统一映射为从 0 开始的紧凑整数序列(如 336→0,390→1),保持同 ID 元素序号一致,适用于分组标识、前端索引优化等场景。
本文介绍如何将多维数组中重复出现的 `range` 值(如 336、390)统一映射为从 0 开始的紧凑整数序列(如 336→0,390→1),保持同 ID 元素序号一致,适用于分组标识、前端索引优化等场景。
在 PHP 开发中,常需对多维数组中某一字段(如 'range')的重复值进行归一化编号——即把原始不连续、非零起始的 ID(如 336, 390, 336, 390)转换为逻辑上连续、从 0 开始的组序号(0, 0, 1, 1)。这种需求常见于数据分组渲染、Elasticsearch 聚合结果处理或前端表格按类别折叠展示等场景。
核心思路是:先提取所有唯一 range 值 → 按首次出现顺序排序 → 映射为 0, 1, 2, ... 的键值对 → 批量重写原数组中的 range 字段。
以下是完整、健壮的实现方案:
336, 'year' => 2020, 'month' => 222],
['range' => 336, 'year' => 2020, 'month' => 222],
['range' => 390, 'year' => 2020, 'month' => 222],
['range' => 390, 'year' => 2021, 'month' => 222],
];
// 步骤 1:提取所有 range 值,去重并重置键为连续数字(保证顺序稳定)
$uniqueRanges = array_values(array_unique(array_column($array, 'range')));
// 步骤 2:构建映射表:range_value → sequence_index
$rangeToIndex = array_flip($uniqueRanges);
// 步骤 3:遍历原数组,用映射表替换 range 值
$result = array_map(function ($item) use ($rangeToIndex) {
$item['range'] = $rangeToIndex[$item['range']] ?? 0; // 安全兜底
return $item;
}, $array);
print_r($result);
?>✅ 输出结果:
Array
(
[0] => Array
(
[range] => 0
[year] => 2020
[month] => 222
)
[1] => Array
(
[range] => 0
[year] => 2020
[month] => 222
)
[2] => Array
(
[range] => 1
[year] => 2020
[month] => 222
)
[3] => Array
(
[range] => 1
[year] => 2021
[month] => 222
)
)? 关键说明:
- array_column($array, 'range') 高效提取所有 range 值;
- array_unique() 去重,保留首次出现顺序(PHP 7.2+ 默认行为);
- array_values() 重置键为 0,1,2...,确保序号严格从 0 开始;
- array_flip() 将 [0=>336, 1=>390] 翻转为 [336=>0, 390=>1],实现 O(1) 查找;
- 使用 array_map() + use 闭包避免副作用,保持函数式风格,清晰可维护。
⚠️ 注意事项:
- 若原始数组中 range 可能为 null 或缺失,建议提前校验:array_column($array, 'range', null) 并过滤空值;
- 该方案时间复杂度为 O(n),空间复杂度 O(k)(k 为唯一 range 数量),性能优异;
- 如需按 range 值大小排序(而非首次出现顺序),可将 array_unique(...) 替换为 array_values(array_unique(...)) 后调用 sort($uniqueRanges, SORT_NUMERIC)。
此方法简洁、高效、无循环嵌套,是处理此类“ID→序号映射”问题的标准实践。
Adobe Acrobat Pro 是面向办公、法务、财务、教育及出版用户的专业PDF处理软件,可在Mac上创建、编辑、转换、合并和保护文档,并提供OCR文字识别、表单、批注、内容比较、敏感信息遮盖及电子签名功能。
Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。
Shapr3D是一款面向工业设计、机械工程、建筑概念和三维打印工作流的CAD软件。Mac版采用Parasolid建模内核,支持草图约束、实体建模、工程图、可视化渲染及常见CAD格式交换,并可通过账户在多台设备之间同步项目。
AutoCAD 是 Autodesk 推出的专业计算机辅助设计软件,Windows 版支持精确二维绘图、三维实体与曲面建模、图纸标注、布局发布和任务自动化,并包含多套行业专业化工具组合,适用于建筑、机械、电气、工程建设及制造设计人员。
Adobe Acrobat Pro 是面向专业 PDF 工作的综合解决方案,可在 Windows 中创建、编辑、转换、比较、整理和保护文档,并支持表单、电子签名、扫描件文字识别及敏感信息永久遮盖。订阅还包含网页、移动服务和云端协作能力,
Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。













