本文介绍如何将多维数组中重复出现的 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产品图添加背景
相关推荐
cmes_love18 小时前
期货期权L2五档行情、逐笔成交、分钟日线数据字段速览沐欣工作室_lvyiyi18 小时前
家庭水资源节能系统设计(论文+源码)神仙别闹18 小时前
基于C语言实现 TINY+ 编译器FelixZhang02818 小时前
量化求真10|回测通过以后,策略就能上场吗?Ticnix18 小时前
你的 Agent 聊到第 20 轮就"失忆"?你管理的是历史,高手管理的是上下文Raspberry_Pi_官方账号18 小时前
Raspberry Pi 官方分享:利用 14MB 的 Function-Calling LLM 实现端侧自然语言硬件控制醇氧18 小时前
CentOS7.9 Yum 安装 Redis6.x(RPM 包,无需编译,推荐 remi 源)adinnet202618 小时前
意图识别(Intent Recognition):智能体怎么听懂你想干啥VidDown18 小时前
文件没问题但网页播不了:播放器接入实战与那些“环境问题笨小孩@GF 知行合一18 小时前
易语言-基础-外部数据库