动态添加维度到PHP数组

时间:2019-06-17 16:11:05

标签: php arrays multidimensional-array

在发布此问题之前,我已经考虑了很多。

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

从经典数组开始,我想动态将其转换为带有子树的多维度。

对此很清楚:

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

对此:

Array
(
    ['my'] =>
        ['unique'] =>
            ['values'] =>
                ['array'] =>
                    ['and'] =>
                        ['so'] =>
                            ['on']=>
                                ['...'] => []
)

我所做的唯一尝试是“野蛮地”动态创建字符串并使用eval()命令传递它们。

我不是为了个人尊严在此处编写代码。我承认这太糟糕了。内部人士会理解...

我完全相信有正确的方法,但是,当然,如果我在这里,我不知道

最佳

奥斯卡

3 个答案:

答案 0 :(得分:4)

这使用引用来跟踪当前要向其中添加数据的元素,因此开始$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);

答案 1 :(得分:2)

从头开始,从头开始:

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

答案 2 :(得分:1)

另一种选择是使用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);

Php demo