向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我意识到自己是个笨蛋。谢谢