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

PHP多维数组键名层级拼接工具函数实现求助

解决PHP数组层级键名拼接问题

我来帮你搞定这个键名拼接的需求!你的递归函数逻辑出了点小问题,导致返回结果混乱。咱们一步步修正:

原函数的问题分析

  • 递归处理子数组时,错误地将$parentKey和implode后的递归结果直接拼接,完全破坏了层级关系
  • 使用array_push把递归返回的整个数组作为单个元素加入结果,导致数组嵌套混乱,输出格式完全不符合预期

修正后的函数

public function buildExpressionKey($array, $parentKey = null) {
    $expression = [];
    foreach ($array as $key => $value) {
        // 构建当前层级的完整键名:有父键就拼接,没有则直接用当前键
        $currentKey = $parentKey ? "{$parentKey}.{$key}" : $key;
        
        if (is_array($value)) {
            // 递归处理子数组,合并返回的所有键名到结果数组
            $expression = array_merge($expression, $this->buildExpressionKey($value, $currentKey));
        } else {
            // 非数组值,直接将完整键名加入结果
            $expression[] = $currentKey;
        }
    }
    return $expression;
}

函数逻辑说明

  1. 构建当前键名:每次循环先根据父键和当前键生成完整的层级路径,比如父键是Darren、当前键是age时,就得到Darren.age
  2. 递归处理子数组:如果当前值是数组,就把当前生成的完整键名作为新的父键传入递归函数,再用array_merge把递归返回的所有子键名合并到主结果里,避免数组嵌套
  3. 处理非数组值:如果当前值不是数组,直接把完整的层级键名加入结果数组

测试示例

用你的测试数组调用该函数:

$array = [
    "Darren" => [
        "age" => "18",
        "work" => [
            "occupation" => "developer",
            "company" => "ABC Ltd"
        ]
    ],
    "John" => [
        "age" => "24",
        "work" => [
            "occupation" => "developer",
            "company" => "ABC Ltd",
            "url" => "www.example.com"
        ],
    ]
];

$result = $this->buildExpressionKey($array);
print_r($result);

返回结果会完全符合你的预期:

Array
(
    [0] => Darren.age
    [1] => Darren.work.occupation
    [2] => Darren.work.company
    [3] => John.age
    [4] => John.work.occupation
    [5] => John.work.company
    [6] => John.work.url
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:44:25