çok boyutlu bir dizi veritabanı ağaç

2 Cevap php

i parentId ile basit bir veritabanı ağaç var ve ben db okumak ve yukarıdaki gibi bir dizi almak istiyorum

Array
(
 Title: Category 1
 Children => Array
             (
              => Title: Category 1.1

              => Title: Category 1.2
                     Children =>  Array
                               (
                                => Title: Category 1.2.1

                               )
              ) 

)

Yukarıdaki kod ile uygulamaya çalışın

    function getTree($rootid)
    {
       $result = =mysql_query("select * from tree where parentid='$rootid'");
       while ($row = mysql_fetch_array($result)) { 

        $arr[]=$row["Title"];
        getChilds($row["id"]);

      }

    }


   function getChilds($id)
    {
       $result = =mysql_query("select * from tree where parentid='$id'");
       while ($row = mysql_fetch_array($result)) { 

        //childers nodes here
        $arr[]=$row["Title"];

        getChilds($row["id"]);

      }

    }

}

Ben bu yüzden bu kadar yazdı ve son düğüme çocukları devam yineleme işlevi dizi geçmek için nasıl bir sorun var.

Onun bir sınıf içinde uygulamak ve i olarak geçmek zorunda & biliyorum $ Dizi ama emin değilim nasıl

Takdir Herhangi bir yardım

Teşekkürler

2 Cevap

Böyle bir şey deneyin:

<?php
function getTree($rootid)
{
   $arr = array();

   $result = mysql_query("select * from tree where parentid='$rootid'");
   while ($row = mysql_fetch_array($result)) { 
     $arr[] = array(
       "Title" => $row["Title"],
       "Children" => getTree($row["id"])
     );
   }
   return $arr;
}
?>

adjacency list model iyi bir yaklaşım değildir kullanarak, over here belirttiği gibi. Sen daha iyi kullanmak istiyorum preorder tree traversal.

Neden? Çoğu zaman (okuyun: Olguların% 99.99 olarak), Bak, uygulamanızın darboğaz veritabanı OLACAKTIR. Preorder ağaç kastetmek gerçekten (o yinelemeli onun "doğal" bir devlet, sizin veri sonra modellenmiştir değil çünkü) daha karmaşık görünüyor, ama sadece bir kez bir sorgu göndermek gerekir ve bitirdiniz. Bunun yanı sıra, kullanım durumları% 99, uygulama yalnızca ağacı gösterecektir değiştiremez / yeniden düzenlemek.