dtkwt62022 2018-07-28 11:24

# PHP如何将单个数组转换为多维数组？

I have that single array and I need to convert in a multidimensional array without using `array_merge`, `array_replace_recurcive` etc, just an autonomous function:

``````\$single = [
0 => 'one',
1 => 'two',
2 => 'tree',
3 => 'four',
4 => 'five'
];
``````

And convert to look like this, with the last key as value:

``````\$multidimentional = [
'one' => [
'two' => [
'tree' => [
'four' => 'five'
]
]
]
];
``````

I have create a recursion function if this helps:

``````function array_replace_recursive(\$defaults, \$replaces) {

if(is_null(\$replaces)) {
\$replaces = [];
}

if(!is_array(\$defaults) || !is_array(\$replaces)) {
return \$replaces;
}

foreach(\$defaults as \$key => \$value) {
if(!array_key_exists(\$key, \$replaces) || is_null(\$replaces[\$key])) {
\$replaces[\$key] = \$value;
} else {
if(is_array(\$replaces[\$key]) && is_array(\$value)) {
\$replaces[\$key] = array_replace_recursive(\$replaces[\$key], \$value);
}
}
}

return \$replaces;
}
``````
• 写回答

#### 4条回答默认 最新

• doukong9982 2018-07-28 11:53
关注

Thinking in recursion, you can write a base case that returns the value of the currently seen item if it is one less than the length of the array.

``````\$singleDim = [
0 => 'one',
1 => 'two',
2 => 'tree',
3 => 'four',
4 => 'five'
];

function toMultiDimArray(\$arr, \$seen=0) {
if ([] === \$arr) {
return [];
}

if(count(\$arr) - 1 === \$seen) {
return \$arr[\$seen];
}

return [
\$arr[\$seen] => toMultiDimArray(\$arr, \$seen+1)
];
}

\$multiDim = toMultiDimArray(\$singleDim);

var_dump(\$multiDim);

array(1) {
["one"]=>
array(1) {
["two"]=>
array(1) {
["tree"]=>
array(1) {
["four"]=>
string(4) "five"
}
}
}
}
``````
本回答被题主选为最佳回答 , 对您是否有帮助呢?
评论

#### 悬赏问题

• ¥15 关于IMageEnView 图标定位问题
• ¥20 求解答（matlab）
• ¥30 ffmpeg库使用过程中遇到的问题
• ¥15 pyqt5 中python如何通过Qtwebchannel主动发消息给web前端
• ¥15 关于HTML中title获取xml内容的问题
• ¥15 fanuc机器人PRIO083数字信号未复原错误，如何解决？
• ¥20 如何为现有电路板增加远程控制功能
• ¥15 UE5打包失败，求解决
• ¥15 请问STM32G431的CANOPEN协议函数怎么写