Недавно я начал использовать 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);
}
}
Ваша структура ввода далека от оптимальной, но она все еще может работать. Если я правильно понимаю, это то, что вам нужно:
$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
преобразовать его обратно.
Других решений пока нет …