如何将数组元素作为子数组插入,例如第一个元素是第二个元素的父元素,第二个元素是第三个元素的父元素等等?

How to insert array elements as sub array like first element is the parent of second,second is the parent of third and so on?

我需要转换一个类似于 $data = array('Image','Thumbnail','size')$data= array('Image'=>array('Thumbnail'=>array('size'=>'test'))); 格式。 怎么可能? 我试过类似下面的东西。

$count= count($data);
$last = $count-1;
for($i=$count-2;$i>=0;$i--)
{
  $newArray[$data[$i]][$data[$last]]='test'; 
  $last=$i;

}

但它给出的输出为

Array(
[thumbnail] => Array
    (
        [type] => test
    )

[image] => Array
    (
        [thumbnail] => test
    ))

如有任何帮助,我们将不胜感激。谢谢:-)

您还有其他进一步的考虑吗?

下面的代码就是这样做的:

<?php
$data = array('Image','Thumbnail','size');
$newArray[$data[0]][$data[1]][$data[2]]='test'; 
var_dump($newArray);

或者您可以像这样使用 for 循环:

<?php
$data = array('Image','Thumbnail','size');
$result=array();
for($i=(count($data)-1);$i>=0;$i--){
    if($i==(count($data)-1))
        $result[$data[$i]]='test';
    else{
        $result[$data[$i]]=$result;
        unset($result[$data[$i+1]]);
    }
}

您可以创建自己的方法来创建这样的结构,只需遍历数组并为每个元素创建一个内部子元素。

function createPath($array) {
    $result = [];
    $current = &$result;
    foreach ($array as $node) {
        $current[$node] = [];
        $current = &$current[$node];
    }
    return $result;
}

这也可以用 array_reduce 和一个反向数组来完成:(array_reduce doumentation, array_reverse documentation)

$result = array_reduce(array_reverse($array), function($carry, $element) {
       return [$element => $carry]; 
    }, []);

虽然 foreach 解决方案将从外部元素到最内部元素构建结构,但 array_reduce 解决方案将从内部到外部元素构建它。

两种解决方案都会创建输出:

[
    'Image' => [
        'Thumbnail' => [
            'size' => []
        ]
    ]
]

如果您希望最内键包含另一个值而不是一个空数组,您可以将 array_reduce 进位的初始值更改为所需的值或向 createPath 添加另一个参数函数,将此值添加为最内键。

你可以使用这个,非常基本的逻辑:

$array = array('Image','Thumbnail','size', 'test');
$a = [];
$i = count($array)- 1;
$a[$array[$i-1]] = $array[$i];
--$i;
while($i >= 1 ) {
    $a[$array[$i-1]] = $a;
    unset($a[$array[$i]]);
    --$i;
}