2016-03-31 21 views
-1

Bir ağaç dizilim var, ancak diziyi boyuta göre gruplamak istiyorum, böylece ağacın her düzeyini kendi DIV'unda görüntüleyebilirim.Dizilime göre boyut düzeyi nasıl gruplanır?

Benim ağaç dizidir:

$tree = 
array(
    1 => array('id'=>1, 'title'=>'Category 1', 'parent_id'=>0, 
     'children'=> array(
      2 => array('id'=>2, 'title'=>'Category 2', 'parent_id'=>1, 'children'=>''), 
      3 => array('id'=>3,'title'=>'Category 3','parent_id'=>1,'children'=>''), 
      4 => array('id'=>4, 'title'=>'Category 4', 'parent_id'=>1, 
       'children'=> array(
        8 => array('id'=>8, 'title'=>'Category 8', 'parent_id'=>4, 'children'=>''), 
        9 => array('id'=>9, 'title'=>'Category 9', 'parent_id'=>4, 'children'=>''), 
        10 => array('id'=>10, 'title'=>'Category 10', 'parent_id'=>4, 
         'children'=> array(
          11 => array('id'=>11, 'title'=>'Category 11', 'parent_id'=>10, 'children'=>''), 
          12 => array('id'=>12, 'title'=>'Category 12', 'parent_id'=>10, 'children'=>''), 
          13 => array('id'=>13, 'title'=>'Category 13', 'parent_id'=>10, 'children'=>'') 
         ) 
        ) 
       ) 
      ) 
     ) 
    ), 
    5 => array('id'=>5, 'title'=>'Category 5', 'parent_id'=>0, 
     'children'=>array(
      6 => array('id'=>6,'title'=>'Category 6', 'parent_id'=>5, 'children'=>''), 
      7 => array('id'=>3,'title'=>'Category 7', 'parent_id'=>5, 'children'=>'') 
     ) 
    ) 
); 

Ben this gibi her seviyede ayırmak istiyorum. gruplandırılmış çıkışı için Benim fikrim böyle bir şeydir: Eğer başka fikirler varsa başka

$grouped = array(
    0 => array(
     1 => array('id'=>1, 'title'=>'Category 1', 'parent_id'=>0), 
     5 => array('id'=>5, 'title'=>'Category 5', 'parent_id'=>0) 
    ), 
    1 => array(
     2 => array('id'=>2, 'title'=>'Category 2', 'parent_id'=>1), 
     3 => array('id'=>3, 'title'=>'Category 3', 'parent_id'=>1), 
     4 => array('id'=>4, 'title'=>'Category 4', 'parent_id'=>1), 
     6 => array('id'=>6, 'title'=>'Category 6', 'parent_id'=>5), 
     7 => array('id'=>3, 'title'=>'Category 7', 'parent_id'=>5) 
    ), 
    2 => array(
     8 => array('id'=>8, 'title'=>'Category 8', 'parent_id'=>4), 
     9 => array('id'=>9, 'title'=>'Category 9', 'parent_id'=>4), 
     10 => array('id'=>10, 'title'=>'Category 10', 'parent_id'=>4) 
    ), 
    3 => array(
     11 => array('id'=>11, 'title'=>'Category 11', 'parent_id'=>10), 
     12 => array('id'=>12, 'title'=>'Category 12', 'parent_id'=>10), 
     13 => array('id'=>13, 'title'=>'Category 13', 'parent_id'=>10) 
    ) 
); 

şey iyi, ama ben foreach çıktı dizisi edebilmek ve farklı her düzeyde tüm öğeleri görüntülemek isteyen DIV.

EX:

<div id="box-1"> 
    Group Array[1] 
</div> 
<div id="box-2"> 
    Group Array[2] 
</div> 
<div id="box-3"> 
    Group Array[3] 
</div> 
<div id="box-4"> 
    Group Array[4] 
</div> 

Bunu nasıl yapabilirim?

+2

Lütfen bkz. [Soru] ve [Mükemmel soru] (http://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/). – Rizier123

+0

Bunu yinelemeli olarak uygulayabilirsiniz. Geçerli seviyedeki tüm bilgileri bir listeye ekleyen bir fonksiyon yazınız, daha sonra (bu fonksiyon içerisinde) fonksiyonun kendisini “çocuklar” özelliğinde çağırınız. – jojonas

+0

Sorunuzu, resimdeki kodu eklemek ve amaçlanan hedefiniz olarak algıladıklarımı netleştirmek için düzenledim. Aklınızdaki gibi değilse, değişiklikleri yeniden düzenlemeyi veya geri almayı lütfen çekinmeyin. Bunu başarmak için yazdığınız herhangi bir kodu ekleyebiliyorsanız, sorunu daha da açıklığa kavuşturmaya yardımcı olabilir. –

cevap

2

Aşağıda, bir ağaç dizisinin her düzeyini ayıracak basit bir özyinelemeli işlevin bir örneği verilmiştir.

// begin with a reference to an empty array and level 0 
function split_levels($branches, &$output = array(), $level = 0) { 

    // loop over each element of the current branch 
    foreach ($branches as $id => $branch) { 

     // if the element has children, make a recursive call with an incremented level 
     if ($branch['children']) split_levels($branch['children'], $output, $level + 1); 

     // remove the children (this is optional) 
     unset($branch['children']); 

     // add the element to the output array at the appropriate level 
     $output[$level][$id] = $branch; 
    } 
} 

$output Çünkü böyle çağrılmalıdır Bu işlevde bir referanstır:

split_levels($tree, $output); 

ve sonuçları $output olacaktır.

+0

Çalışıyor !!!! Teşekkürler verry mush. :) – user3514448

İlgili konular