本文介绍如何将多维数组中重复出现的 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 字段。以下是完整、健壮的实现方案:<?php// 示例输入数据array = \[ \['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_indexrangeToIndex = array_flip(uniqueRanges);// 步骤 3:遍历原数组,用映射表替换 range 值result = array_map(function (item) use (rangeToIndex) { item\['range'\] = rangeToIndex[item\['range'\]\] ?? 0; // 安全兜底 return item;}, array);print_r(result);?>? 输出结果:立即学习"PHP免费学习笔记(深入)"; Mokker AI AI产品图添加背景
相关推荐
老神在在0011 小时前
jsonshema小点2401_846339561 小时前
mysql如何审计误删除数据操作_mysql binlog逆向分析追踪2301_769340671 小时前
如何快速查询SQL中的重复记录:GROUP BY与COUNT统计狐狐生风1 小时前
LangGraph 核心概念全解笔记m0_741481781 小时前
SQL嵌套查询逻辑重构_将复杂业务逻辑移至应用层2303_821287381 小时前
Golang log包如何打印日志_Golang日志输出教程【收藏】m0_591364731 小时前
mysql怎么处理连接数过多的报错_调整max_connections参数m0_690825821 小时前
Python Flask项目中如何管理数据库连接_使用SQLAlchemy连接池管理阿正呀1 小时前
CSS如何规范化侧边栏的样式实现_基于BEM结构拆分侧边栏模块