Dinamik fonksiyon özyineleme için php bir dizi anahtarı çoğaltarak?

0 Cevap php

Im CodeIgniter'daki modüler bir CMS sistemi oluşturmak ve Im dinamik dizinin mevcut derinliği dayalı bir işlev içinde bir dizi anahtarları eklemek, sorun nasıl sergiyi sahip ve ben doğrulanıp üzerinde çalışıyor. Örneğin, ben aşağıdaki gibi görünüyor verileri -

[header] => Array ( 
  [blocks] => Array ( 
    [utilitynav] => Array ( 
      [name] => utilitynav [module] => admin [helper] => [model] => [data] => 
    ) 
    [topnav] => Array ( 
      [name] => topnav [module] => admin [helper] => topnav [model] => Db_Sitepages [data] => 
    ) 
    [subhead] => Array ( 
      [name] => subhead [module] => admin [helper] => [model] => [data] => [hasChildren] => 1 
        [blocks] => Array ( 
          [testchild] => Array ( [name] => testchild [module] => admin [helper] => [model] => [data] => [parent] => subhead 
        ) 
      ) 
    ) 
  ) 
)

- Temel olarak, bloklar ana blok içinde sarılır çocukları var. Im gibi şu anda ben çocuklar bloklar çıkışına ayrı bir işlevi kullanıyorum düzeylerini yönetmek için etkili bir yol anlamaya çalışıyorum, ve ben derin 3 düzeyleri gitmek mümkün istedim, ben başka bir işlevi oluşturmak gerekir. Yani dinamik işlevi yineledi, her seferinde her deyim benim için bir dizi anahtarı ekleyerek, yinelemeli bunu yapmaya çalışıyorum.

Örneğin, bu ben çıktı blokları için kullanıyorum fonksiyonu -

  function outputChildBlocks($view_name)
  {

    if(isset($this->view_data[$view_name]['blocks']))
    {
      $html='<div class="blockWrapper">';

        foreach($this->view_data[$view_name]['blocks'] as $block)
        {
            $html.= '<div class="block '.$block['name'].'">';
            $module = $block['module'];
            $name = $block['name'];
            $data['block'] = $block;

            if($block['helper'] != null)
            {
              $this->load->helper($module.'/'.$block['helper']);
            }
            if($block['model'] != null)
            {
              $data['model'] = new $block['model']();
            }

            $html .= $this->load->view($module.'/blocks/'.$name, $data, true);
              if(isset($block['hasChildren']))
              {
                $html .= $this->outputChildChildBlocks($view_name, $name);
              }
            $html.= '</div>';
        }
      $html .= '</div>';
      return $html;
    }
  }

Gördüğünüz gibi ana çocuk varsa, altta ben kontrol ediyorum, ve eğer, ben çıkışı çocuk blokları (outputChildChildBlocks) için tamamen ayrı bir işlevi çağırmak yerine - ben işlev tanımak istiyorum, Yani Geçerli konumunuzun derinliği, ve aldığında eğer altta açıklamada, çocuk sahibi eğer, yerine daha sonra, yeniden kendini çalıştırmak her seviye için bir sayaç eklemek, ve

foreach ($ this-> view_data [$ view_name] ['blok'] $ blok olarak)

gitmek zorunda

foreach ($ this-> view_data [$ view_name] ['blok'] [$ isim] $ blok olarak ['blok'])

2. seviye için, o zaman gidin

foreach ($ this-> view_data [$ view_name] ['blok'] [$ isim] ['blok'] [$ isim] $ blok olarak ['blok'])

3. seviye için, vesaire vesaire.

Neyse ben dinamik dizi için ['blok'] anahtarı eklemek için nasıl emin değilim, o ana blok için çalışacak olan fonksiyonun her yineleme için ... (tabii ki ben [altbilgi] ve [içeriğe sahip ) blokların kendi setleri ile de] blok ve ne değildir

Ben üzerinden açıkladı yoksa bunu yapmak için bir eğilim var ama mümkün olduğunca açık olmaya çalışıyorum ve bana bu işlev özyinelemeli yapmanın en iyi yolu göstermek eğer ben sana sonsuza dek borçlu olacak soruyu karmaşık eğer Neyse dileriz!

0 Cevap