Recursively seviyelere diziyi sıralamak

1 Cevap php

Ben ikili mlm sistemini kullanan bir sitede çalışıyordum.

Illustration here

Yani veritabanında iki tablo var, kullanıcılar ilişkileri Anad. Kullanıcı ID ve kişisel verilerin sütunlar vardır. Kimliği, parentID, childID, Poz: İlişkiler 4 sütun vardır. Poz sol veya sağ olduğu.

Ben başarıyla ardışık verilen pid (parentID) tüm çocukları listeleyen bir fonksiyon yazdım. Ancak ben (ekran ve hesaplama amaçlı) seviyelerinde sıralamak gerekir.

Ben kullanıcı kimliği = 1 çocukların bir dizi var:

Array
(
    [0] => Array
        (
            [id] => 2
            [parentID] => 1
            [pos] => l
        )

    [1] => Array
        (
            [id] => 4
            [parentID] => 2
            [pos] => l
        )

    [2] => Array
        (
            [id] => 8
            [parentID] => 4
            [pos] => l
        )

    [3] => Array
        (
            [id] => 5
            [parentID] => 2
            [pos] => p
        )

    [4] => Array
        (
            [id] => 3
            [parentID] => 1
            [pos] => p
        )

    [5] => Array
        (
            [id] => 6
            [parentID] => 3
            [pos] => l
        )

    [6] => Array
        (
            [id] => 7
            [parentID] => 3
            [pos] => p
        )

)

Şimdi should bu gibi bakmak o bir çok boyutlu dizi döndüren fonksiyonu adlı get_levels var:

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [id] => 2
                    [parentID] => 1
                    [pos] => l
                )

            [1] => Array
                (
                    [id] => 3
                    [parentID] => 1
                    [pos] => p
                )

        )
   [1] => Array
        (
            [0] => Array
                (
                    [id] => 4
                    [parentID] => 2
                    [pos] => l
                )

            [1] => Array
                (
                    [id] => 5
                    [parentID] => 2
                    [pos] => p
                )
            [2] => Array
                (
                    [id] => 6
                    [parentID] => 3
                    [pos] => l
                )

            [3] => Array
                (
                    [id] => 7
                    [parentID] => 3
                    [pos] => p
                )

        )
  ETC.

)

İşte fonksiyonu bulunuyor:

 function get_levels($pid,$level, $level_id){
       $children = children_array($pid,1);
       if (sizeof($children) > 0):
          foreach ($children as $child):
             if ($child["parentID"] == $pid):


        		get_levels($child["id"], $level, $level_id+1);
        		$level[$level_id][] = $child;			


        endif;	


         endforeach;
      endif;
      return $level;
 }

fonksiyonu children_array ($ pid, $ derinlik) çocukları döner ... $ derinliği = 1 için, hemen çocuklar (0 veya 1 veya 2) döndürür $ derinliği = 0 için tüm çocukları döndürür

Herkes bu fonksiyonu ile bana yardımcı olabilir misiniz? Ben işlevi çalışır düşünüyorum, ancak I don't know how to recursively use and add to array.

1 Cevap

Eğer yanlış bağlamında bir veri yapısı kullanılarak gibi görünüyor. Bu bir ikili ağaç, henüz kısa onun sınırlarını ve kullanım kurallarını tanımlamak değildir düzeyli bir diziye temsil ediyor.

Ağacını kullanarak, ben sağ ve sol iki çocuğu var bir düğüm sınıfı gibi bir şey kullanmak istiyorsunuz. Ağacın yineleme kolayca takip etmek istediğiniz hangi kurallar setine bağlı olarak yapılır içine düzenleme / silme / ekleme, kek parçası olacaktır. Ağaç saklarken, ben kolayca bir ilişkisel veritabanı yapılabilir Ahnentafel list çeşit kullanabilirsiniz.

Ben depolama kurallarını değiştirmek, ben de tersi yineleme kurallarını değiştirmek ve olabilir çünkü ben hiçbir şekilde yineleme ve depolama süreçlerinin hem karıştırmak olur.