【问题标题】:Copying a multi dimensional array of nodes into another array将多维节点数组复制到另一个数组中
【发布时间】:2016-02-21 23:28:37
【问题描述】:

我希望使用递归函数将一个多维数组转换为另一个多维数组。

源数组:

Array
(
    [1] => Array
        (
            [id] => 1
            [source_name] => kk56ca1d0f2378f
            [company_id] => 1
            [lft] => 1
            [rgt] => 18
            [parent_id] => 0
            [children] => Array
                (
                    [2] => Array
                        (
                            [id] => 2
                            [source_name] => kk56ca1d17f3f63
                            [company_id] => 1
                            [lft] => 2
                            [rgt] => 3
                            [parent_id] => 1
                            [children] => Array
                                (
                                )

                        )

                    [3] => Array
                        (
                            [id] => 3
                            [source_name] => kk56ca1d1ebe975
                            [company_id] => 1
                            [lft] => 4
                            [rgt] => 13
                            [parent_id] => 1
                            [children] => Array
                                (
                                    [6] => Array
                                        (
                                            [id] => 6
                                            [source_name] => kk56ca1fc882ac0
                                            [company_id] => 1
                                            [lft] => 5
                                            [rgt] => 10
                                            [parent_id] => 3
                                            [children] => Array
                                                (

                                                )

                                        )

                                )

                        )

                )

        )

)

我需要进入格式

    Array
(
    [0] => Array
        (
            [id] => 1
            [text] => kk56ca1d0f2378f
            [parent_id] => 0
            [nodes] => Array
                (
                    [0] => Array
                        (
                            [id] => 2
                            [text] => kk56ca1d17f3f63
                            [parent_id] => 1
                            [nodes] => Array
                                (
                                )

                        )

                    [1] => Array
                        (
                            [id] => 3
                            [text] => kk56ca1d1ebe975
                            [parent_id] => 1
                            [nodes] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 6
                                            [text] => kk56ca1fc882ac0
                                            [parent_id] => 3
                                            [nodes] => Array
                                                (

                                                )

                                        )

                                    [1] => Array
                                        (
                                            [id] => 15
                                            [text] => kk
                                            [parent_id] => 3
                                            [nodes] => Array
                                                (
                                                )

                                        )

                                )

                        )

                )

        )

)

我已经尝试了几个小时,但没有任何结果。任何帮助将不胜感激。

源数组具有关联索引(尽管它们是数字),目标数组具有数字索引。除此之外,只需要删除一些索引并更改一些名称即可。

编辑:

具体改动:

  • 将索引名称 source_name 更改为文本
  • 将索引名称子节点更改为节点
  • 未设置索引 lft、rgt、company_id

我对递归没有太多经验,所以我尝试过没有结果。

这是我能想到的:

// pass array of nodes
function convert_array($from){

    // this is a node
    if(isset($from['source_name']))
    {
        $temp = array();
        $temp['id'] = $from['id'];

        convert_array($from['children']);
    }
    // this is an array of nodes
    else
    {
        foreach($from as $arr)
        {
            $ret = convert_array($arr);
            print_r($ret);
        }

    }
}

但我无法理解要返回的数据以及新数组是如何从返回值构建的。

【问题讨论】:

  • 你能解释一下你想在第一个数组中改变什么吗?还是只想重新编号数组顶层的索引?
  • 你能减少你的例子吗,很难看到,你想要实现的,两个数组在很多方面都有很大的不同......
  • 阵列不是火箭科学。正如我上面的两个 cmets 已经说过的:弄清楚你到底想要做什么。然后就去做吧 ;) foreach() 非常适合 PHP 中的数组。如果您有未知的维度,请查找递归。那么应该就是几行简单的代码
  • 我已经修改了我的帖子。

标签: php recursion multidimensional-array


【解决方案1】:

这里的工作函数:

function convert_array( $array )
{
    $retval = array();

    foreach( $array as $row )
    {
        $child              = array();
        $child['id']        = $row['id'];
        $child['text']      = $row['source_name'];
        $child['parent_id'] = $row['parent_id'];
        if( count( $row['children'] ) )
        { $child['nodes'] = convert_array( $row['children'] ); }
        else
        { $child['nodes'] = array(); }
        $retval[] = $child;
    }
    return $retval;
}

3v4l demo

我认为这是不言自明的,顺便说一句:我们初始化一个空数组 ($retval),然后我们对所有数组参数执行 foreach 循环:对于每个元素,我们初始化一个新数组并添加它idsource_name 作为textparent_id;如果children 索引有元素,我们执行递归调用来填充nodes 数组索引,否则我们将其设置为空数组。

【讨论】:

    猜你喜欢
    • 2021-12-31
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    相关资源
    最近更新 更多