我只有一个数组,我需要在多维数组中进行转换,而无需使用<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
,array_merge
等,只是一个自治函数:
array_replace_recurcive
并转换为如下形式,最后一个键为值:
$single = [
0 => 'one',
1 => 'two',
2 => 'tree',
3 => 'four',
4 => 'five'
];
如果有帮助,我已经创建了一个递归函数:
$multidimentional = [
'one' => [
'two' => [
'tree' => [
'four' => 'five'
]
]
]
];
答案 0 :(得分:2)
您可以使用PHP(自5.6版开始)argument unpacking和一个非常简单的递归函数来完成此操作:
$single = [
0 => 'one',
1 => 'two',
2 => 'tree',
3 => 'four',
4 => 'five'
];
function convert($key, ...$values) {
if (count($values) == 1)
return array($key => $values[0]);
else
return array($key => convert(...$values));
}
print_r(convert(...$single));
输出:
Array
(
[one] => Array
(
[two] => Array
(
[tree] => Array
(
[four] => five
)
)
)
)
您也可以不使用count
(仅使用isset
)来做到这一点:
function convert2($key, ...$values) {
if (!isset($values[1]))
return array($key => $values[0]);
else
return array($key => convert(...$values));
}
print_r(convert2(...$single));
输出:
Array
(
[one] => Array
(
[two] => Array
(
[tree] => Array
(
[four] => five
)
)
)
)
答案 1 :(得分:1)
以递归的方式思考,您可以编写一个基本案例,如果当前所见项目的值比数组的长度小1,则返回该值。
$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"
}
}
}
}
答案 2 :(得分:1)
$single = [
0 => 'one',
1 => 'two',
2 => 'tree',
3 => 'four',
4 => 'five'
];
function to_multidimentional($array, $count = 0, $seen = 0) {
if($count - 1 === $seen) {
return $array[$seen];
}
return [
$array[$seen] => to_multidimentional($array, $count, $seen + 1)
];
}
$single = to_multidimentional($single, count($single));
print_r($single);
exit;
答案 3 :(得分:0)
对此没有任何递归。只是向后遍历$single
数组,然后每次将结果嵌入到新键中:
function foo( $single ) {
$multidimensional = [ $single[ count($single) - 1 ] ];
for( $i = count($single) - 2; $i >= 0; $i-- ) {
$multidimensional = [ $single[$i] => $multidimensional ];
}
}