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

PHP实现弹出数组末尾元素并将其作为其余元素的键

解决PHP多维数组转嵌套键值结构的问题

需求说明

给定如下多维数组:

$inputArray = array(
    array(
        array('value31', 'value32'),
        array('value33', 'value34'),
        'value21'
    ),
    'value11'
);

需要实现的逻辑是:从每个子数组中弹出最后一个元素作为键,将该数组剩余的所有元素作为这个键对应的值,最终得到如下嵌套结构:

$outputArray = array(
    'value11' => array(
        'value21' => array(
            array('value31', 'value32'),
            array('value33', 'value34'),
        )
    )
);

原代码问题分析

你提供的convertArray函数存在以下核心问题:

  • 递归键传递逻辑错误:将当前层级弹出的键传递给子数组递归处理,导致嵌套层级完全颠倒
  • 多维数组判断不准确:使用count($inputArray) != count($inputArray, COUNT_RECURSIVE)判断多维数组,当数组中混合数组与非数组元素时会出现误判
  • 结果合并方式错误:用array_merge合并递归结果,无法生成需求中的嵌套键值结构,反而会扁平化数据

正确实现代码

以下是满足需求的递归函数实现:

function convertArray(array $inputArray) {
    if (empty($inputArray)) {
        return [];
    }

    // 弹出当前数组最后一个元素,作为当前层级的键
    $currentKey = array_pop($inputArray);
    $currentValue = [];

    foreach ($inputArray as $item) {
        // 对每个子数组递归处理,嵌套生成键值结构
        if (is_array($item)) {
            $currentValue[] = convertArray($item);
        } else {
            $currentValue[] = $item;
        }
    }

    // 若当前值仅包含一个元素,直接取该元素(避免多余的数组层级)
    if (count($currentValue) === 1) {
        $currentValue = reset($currentValue);
    }

    // 返回当前层级的键值对
    return [$currentKey => $currentValue];
}

测试验证

调用上述函数处理输入数组:

$inputArray = array(
    array(
        array('value31', 'value32'),
        array('value33', 'value34'),
        'value21'
    ),
    'value11'
);

$outputArray = convertArray($inputArray);
print_r($outputArray);

输出结果与需求完全一致:

Array
(
    [value11] => Array
        (
            [value21] => Array
                (
                    [0] => Array
                        (
                            [0] => value31
                            [1] => value32
                        )

                    [1] => Array
                        (
                            [0] => value33
                            [1] => value34
                        )

                )

        )

)

内容的提问来源于stack exchange,提问作者Md Jahid Khan Limon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 15:42:40