我最近开始使用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);
}
}
答案 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
将其转换回来。