用于树视图的数组上的Php递归函数
我有以下数组:用于树视图的数组上的Php递归函数,php,codeigniter,recursion,Php,Codeigniter,Recursion,我有以下数组: Array ( [1] => 0 [2] => 1 [3] => 2 [4] => 3 [5] => 1 [6] => 0 ) 此数组的键是唯一的,值显示键的父级。 就像1和6的父项是0一样,2的父项是1,因为3是2 我正在编写一个递归函数,它将为给定的父id查找树视图。 这是我的密码: function recurviceChild($parent, $childParent, $result
Array
(
[1] => 0
[2] => 1
[3] => 2
[4] => 3
[5] => 1
[6] => 0
)
此数组的键是唯一的,值显示键的父级。
就像1和6的父项是0一样,2的父项是1,因为3是2
我正在编写一个递归函数,它将为给定的父id查找树视图。
这是我的密码:
function recurviceChild($parent, $childParent, $resultArr = array()) {
foreach ($childParent as $key => $parentId) {
if ($parent == $parentId) {
$resultArr[$parentId][] = $key;
$resultArr = $this->recurviceChild($key, $childParent, $resultArr);
}
}
return $resultArr;
}
我创建的函数给出了一级深度的结果。如果我为$parent=1调用此函数($childParent是上面给出的数组),则此函数的结果是:
我期待这样的结果:
Array
(
[1] => Array
(
[2] => Array
(
[3] => Array
(
[0] => 4
)
)
)
[2] => 5
)
或者帮助我创建树视图的东西。
提前谢谢。这正是您想要的:
<?php
$a= array
(
1 => 0,
2 => 1,
3 => 2,
4 => 3,
5 => 1,
6 => 0
);
class node {
var $children;
public function __construct(){
$this->children = array();
}
}
$tree = array();
foreach ($a as $q => $p){
if(!isset($tree[$p]))
$tree[$p] = new node;
if(!isset($tree[$q]))
$tree[$q] = new node;
$mark[$p]=FALSE;
$mark[$q]=FALSE;
array_push($tree[$p]->children,$q);
}
function dfs(&$ans,$node){
global $tree, $mark;
$mark[$node] = TRUE;
$ans = array();
foreach($tree[$node]->children as $child)
if(!$mark[$child]){
$ans[$child]=$child;
dfs($ans[$child],$child);
}
}
$parent=1;
dfs($ans,$parent);
print_r($ans);
?>
型号:
class Menu extends CI_Model {
public function __construct() {
parent::__construct();
}
public function menu_array($parent = 0) {
$items = array();
$this->db->where('parent', $parent);
$results = $this->db->get('os_menu')->result();
foreach($results as $result) {
$child_array = $this->menu_array($result->id);
if(sizeof($child_array) == 0) {
array_push($items, $result);
} else {
array_push($items, array($result, $child_array));
}
}
return $items;
}
public function show_menu_array($array){
$output = '<ul>';
foreach ($array as $key => $mixedValue) {
if (is_array($mixedValue)) {
$output .= '<li>' . $this->show_menu_array($mixedValue) . '</li>';
} else {
$output .= '<li>' . $mixedValue->name . '</li>';
}
}
$output .= '</ul>';
return $output;
}
我不理解如何将原始数组转换为预期数组的逻辑。最后的4是什么,13是什么?
class Menu extends CI_Model {
public function __construct() {
parent::__construct();
}
public function menu_array($parent = 0) {
$items = array();
$this->db->where('parent', $parent);
$results = $this->db->get('os_menu')->result();
foreach($results as $result) {
$child_array = $this->menu_array($result->id);
if(sizeof($child_array) == 0) {
array_push($items, $result);
} else {
array_push($items, array($result, $child_array));
}
}
return $items;
}
public function show_menu_array($array){
$output = '<ul>';
foreach ($array as $key => $mixedValue) {
if (is_array($mixedValue)) {
$output .= '<li>' . $this->show_menu_array($mixedValue) . '</li>';
} else {
$output .= '<li>' . $mixedValue->name . '</li>';
}
}
$output .= '</ul>';
return $output;
}
$menu = new Menu();
$menu_array = $menu->menu_array();
echo $menu->show_menu_array($menu_array);