本文介绍如何将多维数组中重复出现的 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产品图添加背景
相关推荐
用户956256254291 小时前
跟做:Firecrawl 单页转 Markdown 再丢进沙箱总结SelectDB1 小时前
SelectDB 是哪个公司的?是国产数据库吗?一篇讲清飞轮科技与 Apache Doris 的关系威哥爱编程1 小时前
模拟面试智能体开发实战 02:回答等半分钟,谁还愿意练?把服务端和流式输出搭起来这个DBA有点耶1 小时前
库内计算推理:一条SQL背后的算子融合,和外挂方案差了几次网络往返威哥爱编程1 小时前
模拟面试智能体开发实战 01:面试挂了都不知道挂在哪?用 Python 给自己造一个随叫随到的 AI 面试官2601_967980112 小时前
Python行情API量化 02:顺序拉 20 要 2 秒?并发批量把时间压到 0.5 秒伞伞悦读2 小时前
【第81期】特征缩放怎么选:标准化、MinMax 与 Robust 的原理、泄漏对照和完整实验新*2 小时前
从一段 WebSocket 代码聊开:bytes 不是 zlib、binaryType 决定一切,15MB 大消息的零拷贝优化这个DBA有点耶3 小时前
函数索引的“完全一致”有多苛刻:写法、字符集、类型,差一处就失效星恒随风3 小时前
MySQL 从零入门(三):表的约束详解