Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
向PHP数组动态添加维度_Php_Arrays_Multidimensional Array - Fatal编程技术网

向PHP数组动态添加维度

向PHP数组动态添加维度,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,在发布这个问题之前,我考虑了很多 这个问题比其他任何问题都更具概念性 从一个经典数组开始,我想动态地将它转换成带有子树的多维数组 要明确的是,从这一点: $array = ['my', 'unique', 'values', 'array', 'and', 'so', 'on', '...']; 为此: Array ( ['my'] => ['unique'] => ['values'] => [

在发布这个问题之前,我考虑了很多

这个问题比其他任何问题都更具概念性

从一个经典数组开始,我想动态地将它转换成带有子树的多维数组

要明确的是,从这一点:

$array = ['my', 'unique', 'values', 'array', 'and', 'so', 'on', '...'];
为此:

Array
(
    ['my'] =>
        ['unique'] =>
            ['values'] =>
                ['array'] =>
                    ['and'] =>
                        ['so'] =>
                            ['on']=>
                                ['...'] => []
)
我唯一的尝试是“野蛮地”动态创建字符串,并使用
eval()
命令传递它们

我在这里写代码不是为了个人尊严。够糟糕的了,我承认了。业内人士会理解

我完全相信有一个正确的方法可以做到这一点,但当然,如果我在这里,我不知道

最好的


奥斯卡

从结尾开始,以开头结束:

$length = sizeof($array);
$value = [];
for ($index = $length - 1; $index >= 0; $index--) {
    $value = [
        "{$array[$index]}" => $value
    ];
    unset($array[$index]);
}
$array[]=$value;

这使用引用来跟踪当前正在向哪个元素添加数据,因此要启动
$add
是根元素(通过将其设置为
&$newArray
)。每次添加新级别时,它都会将引用移动到此新项目(使用
和$add[$key]
)并重复此过程

$array = ['my', 'unique', 'values', 'array', 'and', 'so', 'on', '...'];
$newArray = [];
$add = &$newArray;
foreach ( $array as $key )  {
    $add[$key] = [];
    $add = &$add[$key];
}
print_r($newArray);

或者另一种选择是使用while循环从外到内创建结构,并在每次迭代中减少索引

临时存储您已有的内容并重置当前的
$result
。然后添加一个带有新键的条目,并添加临时存储的变量作为值

$array = ['my', 'unique', 'values', 'array', 'and', 'so', 'on'];
$result = [];
$tot = count($array) - 1;

while ($tot > -1) {
    $temp = $result;
    $result = [];
    $result[$array[$tot]] = $temp;
    $tot--;
}

print_r($result);

无需测试代码即可投票表决。我读过就够了。低级代码,我喜欢。不止“谢谢”,我祝贺你!!!您实际上不需要
unset()
,只需在末尾覆盖数组-
$array=$value