public function treedata() {
header ( 'Content-Type: text/html; charset=utf-8' );
$treedata = M ( 'mod' )->order ( array (
'pid',
'sysorder',
'id'
) )->where ( 'menu=1' )->select ();
// P($treedata);
$tree = array ();
foreach ( $treedata as $row ) {
$obj = new \stdClass ();
$obj->text = $row ['name'];
$obj->attr = array (
'id' => $row ['id'],
'pid' => $row ['pid'],
'loadurl' => $row ['loadurl'],
'adminurl' => $row ['adminurl']
);
if (! empty ( $row ['loadurl'] )) {
$obj->children = array ();
}
if ($row ['pid'] > 0) {
$parent = $this->findParent ( $tree, $row ['pid'] );
if (isset ( $parent->children )) {
$parent->children [] = $obj;
} else {
$parent->children = array ();
$parent->children [] = $obj;
}
} else {
$tree [] = $obj;
}
}
$this->ajaxReturn ( $tree );
}
private function findParent($tree, $key) {
foreach ( $tree as $obj ) {
if ($obj->attr ['id'] == $key) {
return $obj;
}
if (isset ( $obj->children )) {
$parent = $this->findParent ( $obj->children, $key );
if ($parent)
return $parent;
}
}
return null;
}这个用递归要怎样改造吖?各位高手;我想要的效果是这样的Array
(
[0] => stdClass Object
(
[text] => 系统助手
[attr] => Array
(
[id] => 386
[pid] => 0
[notice] =>
[loadurl] =>
[adminurl] =>
)
[children] => Array
(
[0] => stdClass Object
(
[text] => 提交反审请求
[attr] => Array
(
[id] => 476
[pid] => 386
[notice] =>
[loadurl] =>
[adminurl] => system/cancelbill
)
)
[1] => stdClass Object
(
[text] => 软件问题反馈
[attr] => Array
(
[id] => 387
[pid] => 386
[notice] =>
[loadurl] =>
[adminurl] => system/bugreport
)
) 最佳答案