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
相关产品推荐
相关产品推荐

