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; }
函数逻辑说明
- 构建当前键名:每次循环先根据父键和当前键生成完整的层级路径,比如父键是
Darren、当前键是age时,就得到Darren.age - 递归处理子数组:如果当前值是数组,就把当前生成的完整键名作为新的父键传入递归函数,再用
array_merge把递归返回的所有子键名合并到主结果里,避免数组嵌套 - 处理非数组值:如果当前值不是数组,直接把完整的层级键名加入结果数组
测试示例
用你的测试数组调用该函数:
$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
相关产品推荐
相关产品推荐

