2013-12-19 45 views
-2

即時通訊使用codeigniter的一個應用程序,我想知道如何使用php和MySql作爲分類樹結構,如果所有的數據都在一個表中...我正在製作一個菜單。使用PHP創建一個數組類別樹MySql

因此,這是我的MySQL表例如:

[id_categorie] [categorie_name] [id_parrent] 
     1   Mens    0 
     2   Women    0  
     3   Jeckets   1 
     4   Thights   2 
     5   Pants    1 

求購輸出類似於數組的數組這一個:

Array 
(
    [1] => Array 
     (
      [id] => 1 
      [name] => Mens 
      [parent] => 0 
      [children] => Array 
       (
        [3] => Array 
         (
          [id] => 3 
          [name] => Jackets 
          [parent] => 1 
         ) 

       ) 

     ) 

    [2] => Array 
     (
      [id] => 2 
      [name] => Women 
      [parent] => 0 
     ) 

) 

,所以我可以具有子項顯示菜單,像這樣

-Mens 
    -Jeckets 
    -Pants 
-Women 
    -Thights 
+1

你能給出更多關於你正在尋找的結果的細節嗎?這僅僅是不夠我們的幫助(Ordering id_parents?想要一個特定的PhP結構?) – Sugar

+0

我已經更新了一個問題! –

回答

1

有很多不同的方法可以做到這一點。例如,您可以創建一個包含父母下的孩子的數組。

/** 
* All menu items. This would come from MySQL, for example. 
*/ 
$cats = array(1 => array('id' => 1, 'name' => 'Mens', 'parent' => 0), 
       2 => array('id' => 2, 'name' => 'Women', 'parent' => 0), 
       3 => array('id' => 3, 'name' => 'Jackets', 'parent' => 1)); 
$menu = array(); 
/** 
* Build array that places children under parents 
*/ 
foreach ($cats as $k => $v) { 
    if (isset($v['parent']) && $v['parent'] > 0) { 
     $menu[$v['parent']]['children'][$k] = $v; 
    } else { 
     $menu[$k] = $v; 
    } 
} 

然後循環$菜單並建立您的HTML。

Array 
(
    [1] => Array 
     (
      [id] => 1 
      [name] => Mens 
      [parent] => 0 
      [children] => Array 
       (
        [3] => Array 
         (
          [id] => 3 
          [name] => Jackets 
          [parent] => 1 
         ) 

       ) 

     ) 

    [2] => Array 
     (
      [id] => 2 
      [name] => Women 
      [parent] => 0 
     ) 

) 
0

你會想在php中寫一個遞歸函數,下面是一個例子,你會想要m適合你的代碼。

function getCategoryTree($parentId = 0){ 

    if($result = $this->database->getCategoryByParentID($parentID)){ 
     if($result->num_rows){ 
      while ($resultRow = $result->fetch_array(MYSQLI_ASSOC)) { 
       $resultRow['children'] = $this->getCategoryTree($resultRow['parentID']); 
       $data[] = $resultRow; 
      } 
     } 
    } 

    return $data; 
}