2013-04-13 148 views
0

我有一个cakephp 2.0树行为noe的树数组,我需要将它在层中分开,以便我可以为每个级别构建一个选择器。这里是数组的一个例子:处理树数组的最佳方式

Array 
(
    [25] => Global 
    [26] => _Region1 
    [29] => __Pais1 
    [41] => ___Distrito1 
    [42] => ___Distrito2 
    [30] => __Pais2 
    [43] => ___Distrito1 
    [44] => ___Distrito2 
    [31] => __Pais3 
    [45] => ___Distrito1 
    [32] => __Pais4 
    [46] => ___Distrito1 
    [27] => _Region2 
    [33] => __Pais1 
    [47] => ___Distrito1 
    [34] => __Pais2 
    [48] => ___Distrito1 
    [35] => __Pais3 
    [36] => __Pais4 
    [28] => _Region3 
    [37] => __Pais1 
    [38] => __Pais2 
    [39] => __Pais3 
    [40] => __Pais4 
) 

现在我需要的是创造一个选择全球,另一种选择为REGION1另一个用于pais1,另一个用于disctrito1

的问题是,我可以使用IDS生成它,因为这将由用户改变。

什么将是最好的方式来操纵这个数组,因此它建立一个选择到数组的每个级别。

在此先感谢。

回答

3

您可以通过find('threaded')将树作为嵌套数组获取。这将为您提供树中的每个项目,并将包含所有子节点的'children'键作为数组;

Retrieving Your Data - find('threaded')

然而,如所指出的,因为内容将被用户修改,树的深度可以改变。为了适应这些变化,你需要在树中使用“递归函数”循环,无论其深度

样机代码:

echo $this->MyTreeHelper->buildTreeDropDowns($treeData); 


class MyTreeHelper extends AppHelper { 

    public function buildTreeDropDowns($treeData) 
    { 
     $output = ''; 

     foreach($treeData as $item) { 
       $output .= createAdropDown($item); 

       if (!empty($item['children'])) { 
        $output .= $this->buildTreeDropDowns($item['children']); 
       } 
     } 
     return $output; 
    } 
}