2017-08-29 23 views
-3

我有一個這樣的數組;標準數組到樹型數組

enter image description here

但我想通過使用這樣的電平鍵設置陣列;

enter image description here

,我用這個代碼,但我知道這不是一個妥善的解決辦法,所以你怎麼能幫助我嗎?

$array = array(0=>array('tag'=>'one','level'=>1),1=>array('tag'=>'two','level'=>2),2=>array('tag'=>'three','level'=>3)); 
    foreach($array as $v){ 

     $level = $v['level']; 

     if($level > 0){ 

      $count[1] = count($tree); 
      if($level === 1){ 
       $tree[$count[1]]['tag'] = $v['tag']; 
      } 

      if($level > 1){ 

       $count[2] = (isset($tree[$count[1]-1]['array']))?count($tree[$count[1]-1]['array']):0; 
       if($level == 2){ 
        $tree[$count[1]-1]['array'][$count[2]]['tag'] = $v['tag']; 
       } 

       if($level > 2){ 

        $count[3] = (isset($tree[$count[1]-1]['array'][$count[2]-1]['array']))?count($tree[$count[1]-1]['array'][$count[2]-1]['array']):0; 
        if($level == 3){ 
         $tree[$count[1]-1]['array'][$count[2]-1]['array'][$count[3]]['tag'] = $v['tag']; 
        } 

        if($level > 3){ 

         $count[4] = (isset($tree[$count[1]-1]['array'][$count[2]-1]['array'][$count[3]-1]['array']))?count($tree[$count[1]-1]['array'][$count[2]-1]['array'][$count[3]-1]['array']):0; 
         if($level == 4){ 
          $tree[$count[1]-1]['array'][$count[2]-1]['array'][$count[3]-1]['array'][$count[4]]['tag'] = $v['tag']; 
         } 

        } 

       } 



    } 

    } 

} 
+0

似乎按照您希望的方式運行時,https://3v4l.org/cWt9A。 – chris85

+0

是的,它的工作原理,但如果數組有更深層次的代碼將無法正常工作,所以我需要不同類型的解決方案。 –

+0

你應該問,比你的第一個截圖與你剛纔問的問題沒有關係。 – chris85

回答

0

你來了複雜的,你可以把它像這樣

<?php 
    $arrs = [["tag"=>"one","level"=>1],["tag"=>"two","level"=>2],["tag"=>"three","level"=>3]]; 
    $new = array(); 
    function setLevel($single){ 
    if($single['level']==1){ 
     $new["tag"] = $single['tag']; 
    }else{ 
     $single['level'] -= 1; 
     $new["array"] = setLevel($single); 
    } 
    return $new; 
    } 
    $temp = array(); 
    foreach($arrs as $key=>$arr){ 
    $temp = array_merge_recursive($temp,setLevel($arr)); 
    } 
    print_r($temp); 
?> 

演示1:https://eval.in/851578

演示2:https://eval.in/851584

演示3:https://eval.in/851585

演示4:https://eval.in/851586

0

你可以做一個遞歸函數。

$tree = setTree($array, 0); 

function setTree($v, $i){ 
    $tree = null; 
    $level = $v[$i]['level']; 
    if($level > 0){ 
     $next = $i + 1; 
     if(isset($v[$next])) 
      $tree = array('0' => array('tag' => $v[$i]['tag'], 'array' => setTree($v, $next))); 
     else{ 
      $tree = array('0' => array('tag' => $v[$i]['tag'])); 
     } 
    } 
    return $tree; 
} 

print_r($tree);