You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 23:48:22