PHP如何在保留原有键名与键顺序的前提下扁平化多维数组
PHP保留键名与顺序的多维数组扁平化实现
你当前写的固定层数嵌套foreach方案存在两个硬伤:一是函数参数名与循环内使用的变量名不一致(参数为$list,循环用了$arr)会直接触发报错,二是写死遍历层数无法适配任意深度的嵌套,必然会漏取深层元素。
采用递归遍历实现可以完全满足你的要求:不修改原键名、不改变原有遍历顺序、支持任意层级嵌套,代码如下:
function flatten_array(array $source): array { $result = []; foreach ($source as $key => $value) { // 按原遍历顺序存入当前键,不修改键值 $result[$key] = $value; // 若当前元素为数组,递归遍历子层级 if (is_array($value)) { // 用+运算符合并结果:不会重置数字索引,不会覆盖已存在的同名键,完全保留原顺序 $result = $result + flatten_array($value); } } return $result; } // 调用方式 $flatList = flatten_array($list);
实现说明
- 禁止用
array_merge做数组合并:该函数会自动重排数字键名,会破坏你原有的键值对应关系,+运算符会严格保留所有原键名,遇到重复键时优先保留先遍历到的上层元素,符合原结构遍历逻辑 - 递归逻辑会自动适配任意嵌套深度,不需要手动编写多层foreach,代码简洁无冗余
- 遍历顺序与原生
foreach遍历原多维数组的顺序完全一致,不会出现键位乱序问题
内容的提问来源于stack exchange,提问作者DirtyCoder
相关产品推荐
相关产品推荐

