【发布时间】:2014-10-13 13:31:03
【问题描述】:
在使用 cake PHP 进行 SQL 查询后,我有一个数组,它返回给我一棵树。我没有数组的维数。
我想将其转换为与 jstree 一起使用。我正在与递归函数作斗争,但没有成功。
你能帮帮我吗?
我原来的数组是这样的:
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
(
)
)
)
)
)
)
)
)
)
我想要这样的东西:
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
)
)
)
)
)
)
我尝试过这样的递归函数,但没有成功
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;
}
编辑: 经过测试和评论后,我的功能现在是
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;
}
当我调试时,我可以看到我为每个孩子(我想要的)去我的函数。但我不知道如何制作新的array()
【问题讨论】:
-
我没看太久,但您没有在 if 语句中将
$branch[$curr_index]['children']分配给$this->buildTree的返回值。 -
它有过两个孩子吗?
-
是的,我可以有两个以上的孩子
-
你能展示一个包含多个子元素的数组示例吗?
-
您的输入与您的输出不匹配——请确保输出数组是输入数组的转换版本,而不仅仅是您编造的数据结构。
标签: php arrays recursion multidimensional-array