2017-08-29 9 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); 
関連する問題