我有一个来自cakephp 2.0树行为的树数组,我需要将它分开,所以我可以为每个级别构建一个选择器。以下是该数组的示例:
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
)
现在我需要的是为全局创建一个选择,为pais1另一个选择region1,为disctrito1另一个选择
问题是我可以使用id来生成它,因为用户会改变它。
操作此数组的最佳方法是什么,以便为数组的每个级别构建一个select。
提前致谢。
答案 0 :(得分: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;
}
}