首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将数组元素作为子数组插入,比如第一个元素是第二个元素的父元素,第二个是第三个元素的父元素,依此类推?

如何将数组元素作为子数组插入,比如第一个元素是第二个元素的父元素,第二个是第三个元素的父元素,依此类推?
EN

Stack Overflow用户
提问于 2018-01-02 19:31:42
回答 3查看 88关注 0票数 1

我需要将类似$data = array('Image','Thumbnail','size')的数组转换为$data= array('Image'=>array('Thumbnail'=>array('size'=>'test')));格式。这怎么可能呢?我曾经尝试过下面这样的东西。

代码语言:javascript
复制
$count= count($data);
$last = $count-1;
for($i=$count-2;$i>=0;$i--)
{
  $newArray[$data[$i]][$data[$last]]='test'; 
  $last=$i;

}

但是它给出的输出是

代码语言:javascript
复制
Array(
[thumbnail] => Array
    (
        [type] => test
    )

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

任何帮助都将不胜感激。谢谢:-)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-01-02 19:53:32

您还有其他的考虑因素吗?

下面的代码就是为了做到这一点:

代码语言:javascript
复制
<?php
$data = array('Image','Thumbnail','size');
$newArray[$data[0]][$data[1]][$data[2]]='test'; 
var_dump($newArray);

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

代码语言:javascript
复制
<?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]]);
    }
}
票数 0
EN

Stack Overflow用户

发布于 2018-01-02 20:00:56

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

代码语言:javascript
复制
function createPath($array) {
    $result = [];
    $current = &$result;
    foreach ($array as $node) {
        $current[$node] = [];
        $current = &$current[$node];
    }
    return $result;
}

这也可以使用array_reduce和反转数组来完成:(array_reduce doumentationarray_reverse documentation)

代码语言:javascript
复制
$result = array_reduce(array_reverse($array), function($carry, $element) {
       return [$element => $carry]; 
    }, []);

foreach解决方案将构建从外部元素到最内部元素的结构,而array_reduce解决方案将构建从内部元素到外部元素的结构。

两个解决方案都将创建输出:

代码语言:javascript
复制
[
    'Image' => [
        'Thumbnail' => [
            'size' => []
        ]
    ]
]

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

票数 1
EN

Stack Overflow用户

发布于 2018-01-02 20:22:15

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

代码语言:javascript
复制
$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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48060194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档