在发布此问题之前,我已经考虑了很多。
这个问题比其他任何问题都更具概念性。
从经典数组开始,我想动态将其转换为带有子树的多维度。
对此很清楚:
$array = ['my', 'unique', 'values', 'array', 'and', 'so', 'on', '...'];
对此:
Array
(
['my'] =>
['unique'] =>
['values'] =>
['array'] =>
['and'] =>
['so'] =>
['on']=>
['...'] => []
)
我所做的唯一尝试是“野蛮地”动态创建字符串并使用eval()
命令传递它们。
我不是为了个人尊严在此处编写代码。我承认这太糟糕了。内部人士会理解...
我完全相信有正确的方法,但是,当然,如果我在这里,我不知道
最佳
奥斯卡
答案 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);