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

PHP如何将一维数组按键的/分隔符转换为对应层级的多维数组

方案解答

实现该需求不需要强制使用递归函数,借助PHP的引用特性即可完成更高效、无层级限制的实现,当然递归方案也可正常运行,两种可靠实现如下:

方案1:引用实现(推荐)

利用PHP的引用逐层定位到多维数组的对应层级赋值,无递归栈深度限制,性能更高:

// 转换函数
function flattenToMulti(array $flatArr, string $separator = '/'): array
{
    $result = [];
    foreach ($flatArr as $key => $val) {
        $keySegments = explode($separator, $key);
        $current = &$result;
        $lastIdx = count($keySegments) - 1;
        foreach ($keySegments as $idx => $seg) {
            if ($idx === $lastIdx) {
                $current[$seg] = $val;
                break;
            }
            if (!isset($current[$seg]) || !is_array($current[$seg])) {
                $current[$seg] = [];
            }
            $current = &$current[$seg];
        }
    }
    unset($current); // 销毁引用避免后续操作异常
    return $result;
}

调用示例:

// 你的原始一维数组
$originArr = [
    'Name/First' => 'John',
    'Name/Last' => 'Doe',
    'Age' => 20,
    'Address/Postal/City' => 'New York',
    'Address/Postal/Zip' => '10003',
    'Address/Billing/City' => 'Los Angeles',
    'Phone' => '123456789',
    'Foo/Bar/Foo2/Bar2' => 'test',
];

// 转换为多维数组
$multiArr = flattenToMulti($originArr);
print_r($multiArr);

输出结果完全匹配你给出的预期格式。

方案2:递归实现(可选)

如果偏好递归写法也可使用,优势是逻辑直观,劣势是受PHP默认递归栈深度(通常100层)限制,层级过深会报错:

function flattenToMultiRecursive(array $flatArr, string $separator = '/'): array
{
    $result = [];
    foreach ($flatArr as $key => $val) {
        $keySegments = explode($separator, $key);
        $result = nestedAssign($result, $keySegments, $val);
    }
    return $result;
}

function nestedAssign(array $nestedArr, array $segments, $val): array
{
    $currentSeg = array_shift($segments);
    if (empty($segments)) {
        $nestedArr[$currentSeg] = $val;
        return $nestedArr;
    }
    if (!isset($nestedArr[$currentSeg]) || !is_array($nestedArr[$currentSeg])) {
        $nestedArr[$currentSeg] = [];
    }
    $nestedArr[$currentSeg] = nestedAssign($nestedArr[$currentSeg], $segments, $val);
    return $nestedArr;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:15:02