簡體   English   中英

Php樹視圖數組的遞歸函數

[英]Php Recursive function on array for tree view

我有以下數組:

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
        (
            [0] => 2
            [1] => 5
        )

    [2] => Array
        (
            [0] => 3
        )

    [3] => Array
        (
            [0] => 4
        )

)

我期待這樣的結果:

 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;
}

}

視圖:

$menu = new Menu();
$menu_array = $menu->menu_array();
echo $menu->show_menu_array($menu_array);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM