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

PHP实现多维数组转带完整键名(点分隔)的一维数组

PHP多维数组转一维(键用点连接)

这是处理多层嵌套数组扁平化的常见需求,递归方案最适合应对这种任意层数的场景。下面是一个高效、通用的PHP实现,完全支持5-10层甚至更深的嵌套:

核心递归函数

function flattenArray(array $array, string $prefix = '', array &$result = []): array {
    foreach ($array as $key => $value) {
        // 拼接当前键:有前缀则加分隔点,无则直接用当前键
        $currentKey = $prefix ? "{$prefix}.{$key}" : $key;
        
        if (is_array($value)) {
            // 子数组递归处理,传递当前键作为前缀
            flattenArray($value, $currentKey, $result);
        } else {
            // 非数组值直接存入结果数组
            $result[$currentKey] = $value;
        }
    }
    return $result;
}

用法示例

// 你的测试数组(这里模拟了更深的嵌套来验证)
$originalArray = [
    'firstTest' => [
        'secondTest' => 'x',
        'thirdTest' => 'y',
        'deepLayer' => [
            'level4' => [
                'level5' => 'deepNestedValue'
            ]
        ]
    ],
    'fourthTest' => 'z'
];

// 调用函数得到扁平化数组
$flattenedArray = flattenArray($originalArray);

// 输出结果
print_r($flattenedArray);

输出结果

Array
(
    [firstTest.secondTest] => x
    [firstTest.thirdTest] => y
    [firstTest.deepLayer.level4.level5] => deepNestedValue
    [fourthTest] => z
)

函数说明

  • 递归逻辑:遍历数组每个元素,遇到子数组就递归处理,把当前键作为前缀传递下去,确保键的层级关系用点连接
  • 引用传递:$result参数用引用传递,避免每次递归都创建新数组,提升处理大数组的效率
  • 类型安全:用类型提示约束输入输出,避免非数组类型的错误输入
  • 兼容性:支持数字键(比如['a' => [1 => 'b']]会转成['a.1' => 'b']),完全适配各种嵌套场景

内容的提问来源于stack exchange,提问作者Tebby

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 18:27:31