2009-07-15 4 views
2

配列変数またはオブジェクトにサブ階層ナビゲーションを格納する再帰関数(またはメソッド)を作成しようとしています。ここで私が持っているものです。PHPの動的多次元配列またはオブジェクト

 
class Navigation extends Database 
{ 

    function build($parent_id = 0) 
    { 
     $query = 'SELECT id, name, href, parent_id 
     FROM navigation 
     WHERE parent_id = '.$parent_id.' 
     ORDER BY name'; 
     $results = $db->query($query); 
     while ($row = $results->fetch_object()) { 
      $nav[$row->id] = $row; 
      // echo $row; 
      $this->build($row->id); 
     } 
     return $nav; 
    } 
} 

あなたはコメントアウトした場合echo $rowすべてが正常に動作します。それでは、私はそれが3層のナビゲーションでやりたいことはこれです:配列が動的にこれを行うだろう

 
Array 
(
    [1] => stdClass Object 
    (
     [id] => 1 
     [name] => Home 
     [href] => home.php 
     [parent_id] => 0 
    ) 
    [2] => stdClass Object 
    (
     [id] => 2 
     [name] => Company 
     [href] => company.php 
     [parent_id] => 0 
    ) 
     [4] => stdClass Object 
     (
      [id] => 4 
      [name] => Company Vision 
      [href] => company_vision.php 
      [parent_id] => 2 
     ) 
     [5] => stdClass Object 
     (
      [id] => 5 
      [name] => Company Goals 
      [href] => company_goals.php 
      [parent_id] => 2 
     ) 
    [3] => stdClass Object 
    (
     [id] => 3 
     [name] => Products 
     [href] => products.php 
     [parent_id] => 0 
    ) 
     [6] => stdClass Object 
     (
      [id] => 6 
      [name] => Products Shoes 
      [href] => products_shoes.php 
      [parent_id] => 3 
     ) 
      [7] => stdClass Object 
      (
       [id] => 7 
       [name] => Nike 
       [href] => products_shoes_nike.php 
       [parent_id] => 6 
      ) 

) 

単なる例として、よう:

 
$nav[$row->id] = $row; // Home 
$nav[$row->id] = $row; // Company 
$nav[2][$row->id] = $row; // Company Vision 
$nav[2][$row->id] = $row; // Company Goals 
$nav[$row->id] = $row; // Products 
$nav[3][$row->id] = $row; // Products Shoes 
$nav[3][6][$row->id] = $row; // Products Shoes Nike 

感謝を事前に。

質問:どのように再帰関数/メソッドを作成し、結果にエコーするのではなく、変数に再帰的情報を格納しますか?

問題: (a)はPHPはそれが 自分自身を再帰的に呼び出すたびに(b)のソリューションは、動的にオンザフライでアレイを作成するだろうが、それが可能

+0

多分私はあなたを理解できませんでしたが、何か問題がありますか? – EFraim

+0

そこに質問がありますか? –

+0

少し話題ですが、アプリケーションで親IDで並べ替えて1つ選択します(つまり、0から始まる1つのメニューがある場合) – EFraim

答えて