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

}

}

введите описание изображения здесь

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

Единственное исправление — использование фактического идентификатора узла в качестве ключа в $tree массив, а затем вызов array_values преобразовать его обратно.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]