2016-04-13 28 views
0

私は最近JSTREEを使用して私のjsonデータを表示し始めました(ここで私のサンプルコードで配列として表示しています)。しかし、いくつかのノードは繰り返しています。私は、ノードが既に子ノードであるかどうかを確認するためにIfループを追加することを考えていましたが、それを行う方法がわかりません。私はまた、多くのforループのために私のコードもあまりうまくいっていないと思います。私はPHPの初心者ですので、配列を介して再帰するより速い方法があるかどうかはわかりません。ここに私のコードです。重複したノードを示すJSTree

$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

答えて

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配列のキーとして実際のノードIDを使用して、再びそれを変換するarray_valuesを呼び出している:私が正しく理解していれば、これは何が必要です。

関連する問題