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

PHP中如何将下划线分隔键的数组转为多维数组?

PHP下划线分隔键数组转嵌套多维数组并输出JSON

直接上可运行的解决方案,核心是通过迭代方式将下划线分割的键拆解为嵌套层级,同时自动处理数字索引:

function flattenToNested(array $flatArray): array
{
    $nested = [];
    
    foreach ($flatArray as $key => $value) {
        $keys = explode('_', $key);
        $current = &$nested;
        
        foreach ($keys as $index => $segment) {
            // 处理数字索引(比如elements_0里的0)
            if (ctype_digit($segment)) {
                $segment = (int)$segment;
                if (!isset($current[$segment]) || !is_array($current[$segment])) {
                    $current[$segment] = [];
                }
            } else {
                if (!isset($current[$segment]) || !is_array($current[$segment])) {
                    $current[$segment] = [];
                }
            }
            
            // 最后一个片段直接赋值,否则继续深入层级
            if ($index === count($keys) - 1) {
                $current[$segment] = $value;
            } else {
                $current = &$current[$segment];
            }
        }
        
        unset($current); // 释放引用,避免后续循环污染
    }
    
    return $nested;
}

// 示例输入
$input = [
    'elements_0_image' => 'img1.jpg',
    'elements_0_title' => 'Title 1',
    'elements_1_image' => 'img2.jpg',
    'elements_1_description' => 'Desc 2',
    'settings_theme' => 'dark',
    'settings_layout_columns' => 3
];

// 转换为嵌套数组
$nestedArray = flattenToNested($input);

// 输出格式化后的JSON
echo json_encode($nestedArray, JSON_PRETTY_PRINT);

输出结果

{
    "elements": [
        {
            "image": "img1.jpg",
            "title": "Title 1"
        },
        {
            "image": "img2.jpg",
            "description": "Desc 2"
        }
    ],
    "settings": {
        "theme": "dark",
        "layout": {
            "columns": 3
        }
    }
}

关键逻辑说明

  1. 键拆分:用explode('_', $key)把下划线分隔的键拆成层级片段,比如elements_0_image拆成['elements', '0', 'image']
  2. 数字索引处理:通过ctype_digit判断片段是否为数字,转成整数后作为数组索引,自动生成有序数组
  3. 引用遍历:用引用&$current逐层深入嵌套数组,精准定位赋值位置
  4. 引用释放:每次循环后释放引用,防止后续循环修改错误层级

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:50:30