JSTree显示重复的节点

时间:2016-04-13 01:58:14

标签: php jquery recursion jstree

我最近开始使用JSTREE来显示我的json数据(我在这里的示例代码中将它显示为一个数组)。但是,一些节点正在重复。我想添加一个If循环来检查节点是否已经是一个子节点,但不知道如何做到这一点。我还认为我的代码也没有很好的表现,因为有许多for循环。我是一个PHP新手,所以不确定是否有更快的方法来通过数组进行递归。这是我的代码。

$relation = array(

        "parent"=>array("item"=>array("cs","ls")),

        "cs"=>array("item"=>array("cs_1")),

        "ls"=>array("item"=>array("ls_1")),

        "cs_1"=>array("item"=>array("cs_1_1"))

        );

    $tree = array();

    $i=0;

    foreach($relation as $key_parent=>$value_parent) {

        #$children = array_keys($value_parent);

        $tree[$i++] = array('id'=>$key_parent,'text'=>$key_parent,'state'=>array('opened'=>true),'parent'=>'#');    

        foreach($value_parent['item'] as $key_child_1=>$value_child_1) {

            $tree[$i++]= array('id'=>$value_child_1,'text'=>$value_child_1,'state'=>array('opened'=>true),'parent'=>$key_parent);   

        }

    }

enter image description here

1 个答案:

答案 0 :(得分:0)

您的输入结构远非最佳,但它仍然可以工作。如果我理解正确,这就是你需要的:

$relation = array(
    "parent"=>array("item"=>array("cs","ls")),
    "cs"=>array("item"=>array("cs_1")),
    "ls"=>array("item"=>array("ls_1")),
    "cs_1"=>array("item"=>array("cs_1_1"))
);

$tree = array();

foreach($relation as $key_parent=>$value_parent) {
    $tree[$key_parent] = array('id'=>$key_parent,'text'=>$key_parent,'state'=>array('opened'=>true),'parent'=>'#');    
    foreach($value_parent['item'] as $key_child_1=>$value_child_1) {
        $tree[$value_child_1]= array('id'=>$value_child_1,'text'=>$value_child_1,'state'=>array('opened'=>true),'parent'=>$key_parent);   
    }
}

$tree = array_values($tree);

唯一的解决方法是将实际节点ID用作$tree数组中的键,然后调用array_values将其转换回来。