dougua2309 2014-10-13 13:31
浏览 61
已采纳

用于转换多维数组的递归函数

I have an array after an SQL query made with cake PHP which returns me a tree. I do not the number of dimension of my array.

I want transform it to use it with jstree. I'm fighting with a recursive function and I didn't success.

Can you help me.

My original array looks like this:

Array
(
[0] => Array
    (
        [Confsave] => Array
            (
                [id] => 815
                [Name] => 1
                [parent_id] =>
                [lft] => 1
                [rght] => 30
            )

        [children] => Array
            (
                [0] => Array
                    (
                        [Confsave] => Array
                            (
                                [id] => 816
                                [Name] => 2
                                [parent_id] => 815
                                [lft] => 2
                                [rght] => 15
                            )

                        [children] => Array
                            (
                                [0] => Array
                                    (
                                        [Confsave] => Array
                                            (
                                                [id] => 817
                                                [parent_id] => 816
                                                [lft] => 3
                                                [rght] => 8
                                            )

                                        [children] => Array
                                            (
                                                [0] => Array
                                                    (
                                                        [Confsave] => Array
                                                            (
                                                                [id] => 818
                                                                [Name] => 4
                                                                [parent_id] => 817
                                                                [lft] => 4
                                                                [rght] => 5
                                                            )

                                                        [children] => Array
                                                            (
                                                            )

                                                    )

                                                [1] => Array
                                                    (
                                                        [Confsave] => Array
                                                            (
                                                                [id] => 819
                                                                [Name] => 5
                                                                [parent_id] => 817
                                                                [lft] => 6
                                                                [rght] => 7
                                                            )

                                                        [children] => Array
                                                            (
                                                            )
                                                    )
                                            )
                                    )
                            )
                    )
            )
    )
)

And I want have something like this :

Array
(
[0] => Array
    (
        [text] => 1
        [id] => 815
        [children] => Array
            (
                [0] => Array
                    (
                        [text] => 2
                        [id] => 816
                        [children] => Array
                            (
                                [0] => Array
                                    (
                                        [text] => 3
                                        [id] => 817
                                        [children] => Array
                                            (
                                                [0] => Array
                                                    (
                                                        [text] => 4
                                                        [id] => 818
                                                    )
                                            )
                                    )
                                [1] => Array
                                    (
                                        [text] => 5
                                        [id] => 819
                                    )
                            )
                    )
            )
    )
)

I have try with a recursive function like this but I don't success

private function buildTree(array $elements) {

    $branch=array();
    foreach ($elements as $element){

        $branch[]=$element['Confsave']['Name'];
        if(is_array($element['children'])){
            $this->buildTree($element);
        }

    }
    return $branch;

}

Edit : After test and remarks my function is now

private function buildTree(array $elements) {

    $branch=array();
    foreach ($elements as $element){

        $branch[]=$element['Confsave']['Name'];
        if(is_array($element['children'])){ 
            $this->buildTree($element['children']);
        }

    }
    return $branch;
}

When I am debuging, I can see that I go to my function for each child (what I want). But I don't know how to make the new array()

  • 写回答

1条回答 默认 最新

  • dtvx3420 2014-10-13 14:03
    关注

    this worked for me...

    $array = buildTree($array); 
    
    print_r($array); 
    
    function buildTree(array $parent) { 
       $branch = array();  
       foreach ($parent as $index => $element){  
          $node = array();   
          $node['id']   = $element['Confsave']['id'];
          $node['text'] = isset($element['Confsave']['Name']) ?
                                $element['Confsave']['Name']  : 'no name';
          $node['children'] = buildTree($element['children']); 
          $branch[] = $node; 
       }
       return $branch; 
    }
    

    my initial test array....

    Array
    (
        [0] => Array
            (
                [Confsave] => Array
                    (
                        [id] => 999
                        [Name] => 999
                        [parent_id] => 
                        [lft] => 1
                        [rght] => 30
                    )
    
                [children] => Array
                    (
                        [0] => Array
                            (
                                [Confsave] => Array
                                    (
                                        [id] => 777
                                        [Name] => 777
                                        [parent_id] => 999
                                        [lft] => 1
                                        [rght] => 30
                                    )
    
                                [children] => Array
                                    (
                                    )
    
                            )
    
                        [1] => Array
                            (
                                [Confsave] => Array
                                    (
                                        [id] => 888
                                        [Name] => 888
                                        [parent_id] => 999
                                        [lft] => 1
                                        [rght] => 30
                                    )
    
                                [children] => Array
                                    (
                                    )
    
                            )
    
                    )
    
            )
    
        [1] => Array
            (
                [Confsave] => Array
                    (
                        [id] => 815
                        [Name] => 1
                        [parent_id] => 
                        [lft] => 1
                        [rght] => 30
                    )
    
                [children] => Array
                    (
                        [0] => Array
                            (
                                [Confsave] => Array
                                    (
                                        [id] => 816
                                        [Name] => 2
                                        [parent_id] => 815
                                        [lft] => 2
                                        [rght] => 15
                                    )
    
                                [children] => Array
                                    (
                                        [0] => Array
                                            (
                                                [Confsave] => Array
                                                    (
                                                        [id] => 817
                                                        [parent_id] => 816
                                                        [lft] => 3
                                                        [rght] => 8
                                                    )
    
                                                [children] => Array
                                                    (
                                                        [0] => Array
                                                            (
                                                                [Confsave] => Array
                                                                    (
                                                                        [id] => 818
                                                                        [Name] => 4
                                                                        [parent_id] => 817
                                                                        [lft] => 4
                                                                        [rght] => 5
                                                                    )
    
                                                                [children] => Array
                                                                    (
                                                                    )
    
                                                            )
    
                                                        [1] => Array
                                                            (
                                                                [Confsave] => Array
                                                                    (
                                                                        [id] => 819
                                                                        [Name] => 5
                                                                        [parent_id] => 817
                                                                        [lft] => 6
                                                                        [rght] => 7
                                                                    )
    
                                                                [children] => Array
                                                                    (
                                                                    )
    
                                                            )
    
                                                    )
    
                                            )
    
                                    )
    
                            )
    
                    )
    
            )
    
    )
    

    my result array....

    Array
    (
        [0] => Array
            (
                [id] => 999
                [text] => 999
                [children] => Array
                    (
                        [0] => Array
                            (
                                [id] => 777
                                [text] => 777
                                [children] => Array
                                    (
                                    )
    
                            )
    
                        [1] => Array
                            (
                                [id] => 888
                                [text] => 888
                                [children] => Array
                                    (
                                    )
    
                            )
    
                    )
    
            )
    
        [1] => Array
            (
                [id] => 815
                [text] => 1
                [children] => Array
                    (
                        [0] => Array
                            (
                                [id] => 816
                                [text] => 2
                                [children] => Array
                                    (
                                        [0] => Array
                                            (
                                                [id] => 817
                                                [text] => no name
                                                [children] => Array
                                                    (
                                                        [0] => Array
                                                            (
                                                                [id] => 818
                                                                [text] => 4
                                                                [children] => Array
                                                                    (
                                                                    )
    
                                                            )
    
                                                        [1] => Array
                                                            (
                                                                [id] => 819
                                                                [text] => 5
                                                                [children] => Array
                                                                    (
                                                                    )
    
                                                            )
    
                                                    )
    
                                            )
    
                                    )
    
                            )
    
                    )
    
            )
    
    )
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 求chat4.0解答一道线性规划题,用lingo编程运行,第一问要求写出数学模型和lingo语言编程模型,第二问第三问解答就行,我的ddl要到了谁来求了
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果